class LA::GeneralMatrix(T)
- LA::GeneralMatrix(T)
- LA::Matrix(T)
- Reference
- Object
Overview
generic matrix, heap-allocated
Data are stored in column-major as this is a storage used by LAPACK
See SUPPORTED_TYPES
for supported types
Defined in:
matrix/general_matrix.crConstructors
-
.new(nrows : Int32, ncolumns : Int32, values : Indexable, col_major = false, flags : LA::MatrixFlags = MatrixFlags::None)
Creates matrix with given size and populate elements from
values
-
.new(nrows : Int32, ncolumns : Int32, flags : LA::MatrixFlags = MatrixFlags::None)
Creates zero-initialized matrix of given size
-
.new(nrows : Int32, ncolumns : Int32, flags : LA::MatrixFlags = MatrixFlags::None, &)
Creates matrix of given size and then call block to initialize each element
-
.new(values : Indexable)
Creates matrix from any
Indexable
ofIndexable
s -
.new(matrix : Matrix)
Creates matrix with same content as another matrix
Class Method Summary
-
.[](*args)
Alias for
#new
-
.columns(*args)
Creates matrix from a number of columns
-
.diag(nrows, ncolumns, values)
Returns diagonal matrix of given size with diagonal elements taken from array
values
-
.diag(nrows, ncolumns, &)
Returns diagonal matrix of given size with diagonal elements equal to block value
-
.rows(*args)
Creates matrix from a number of rows
Instance Method Summary
-
#==(other : self)
see
LA::Matrix#==
-
#cat!(other : Matrix(T), dimension)
Concatenate matrix adding another matrix by
dimension
Axis::Rows
(horizontal) orAxis::Columns
(vertical) -
#clone
returns copy of matrix
-
#conjtranspose!
Conjurgate transposes matrix inplace
-
#dup
returns copy of matrix
-
#flags : MatrixFlags
Matrix flags (see
MatrixFlags
for description) -
#flags=(flags : MatrixFlags)
Matrix flags (see
MatrixFlags
for description) -
#hcat!(other)
Concatenate matrix adding another matrix horizontally (so they form a row)
-
#ncolumns : Int32
Count of columns in matrix
-
#nrows : Int32
Count of rows in matrix
-
#raw : Slice(T)
Pointer to a raw data
-
#reshape(anrows, ancolumns, col_major = false)
Returns a matrix with different nrows and ncolumns but same elements (total number of elements must not change)
-
#reshape!(anrows : Int32, ancolumns : Int32, col_major = false)
Changes nrows and ncolumns of matrix (total number of elements must not change)
-
#resize!(anrows : Int32, ancolumns : Int32)
Change number of rows and columns in matrix.
-
#to_a(col_major = false)
Converts matrix to plain array of elements if
col_major
is true, elements are returned as stored inplace, otherwise row-major storage is emulated -
#to_aa(col_major = false)
Converts matrix to array of array of elements if
col_major
is true, elements are returned as stored inplace, otherwise row-major storage is emulated Example:a = GMat[[1, 2], [3, 4]] a.to_aa # => [[1.0, 2.0],[3.0, 4.0]] a.to_aa(col_major: true) # => [[1.0, 3.0],[2.0, 4.0]]
-
#to_unsafe
Returns pointer to raw data, suitable to e.g.
-
#transpose!
transposes matrix inplace
-
#unsafe_fetch(i, j)
returns element at row i and column j, without performing any checks
-
#unsafe_set(i, j, value)
sets element at row i and column j to value, without performing any checks
-
#vcat!(other)
Concatenate matrix adding another matrix vertically (so they form a column)
Instance methods inherited from class LA::Matrix(T)
*(k : Number)*(k : Complex)
*(m : Matrix(T)) *, **(other : Int) **, +(k : Number)
+(k : Complex)
+(m : Matrix(T)) +, -(k : Number | Complex)
-(m : Matrix(T))
- -, /(k : Number | Complex) /, ==(other) ==, [](i : Int32, j : Int32)
[](arows : Range(Int32 | Nil, Int32 | Nil), acolumns : Range(Int32 | Nil, Int32 | Nil))
[](row : Int32, acolumns : Range(Int32 | Nil, Int32 | Nil))
[](arows : Range(Int32 | Nil, Int32 | Nil), column : Int32) [], []=(i : Int32, j : Int32, value)
[]=(arows : Range(Int32, Int32), acolumns : Range(Int32, Int32), value)
[]=(row : Int32, acolumns : Range(Int32, Int32), value)
[]=(nrows : Range(Int32, Int32), column : Int32, value) []=, abs(kind : MatrixNorm = MatrixNorm::Frobenius) abs, add!(k : Number, m : Matrix)
add!(m) add!, add_mult(a, b : Matrix(T), *, alpha = 1.0, beta = 1.0) add_mult, almost_eq(other : Matrix(T), eps)
almost_eq(other : Matrix(T)) almost_eq, assume!(flag : MatrixFlags, value : Bool = true) assume!, balance(*, permute = true, scale = true, separate = false) balance, balance!(*, permute = true, scale = true, separate = false) balance!, cat(other : Matrix(T), axis : Axis) cat, cho_solve(b : self, *, overwrite_b = false) cho_solve, cholesky(*, lower = false, dont_clean = false) cholesky, cholesky!(*, lower = false, dont_clean = false) cholesky!, chop(eps = self.tolerance) chop, clear_flags clear_flags, columns columns, conjt conjt, conjt! conjt!, conjtranspose conjtranspose, coshm coshm, cosm cosm, det(*, overwrite_a = false) det, detect(aflags : MatrixFlags = MatrixFlags::All, eps = tolerance) detect, detect?(aflags : MatrixFlags = MatrixFlags::All, eps = tolerance) detect?, diag(offset = 0) diag, each(*, all = false, &) each, each_index(*, all = false, &) each_index, each_lower(*, diagonal = true, all = false, &) each_lower, each_upper(*, diagonal = true, all = false, &) each_upper, each_with_index(*, all = false, &) each_with_index, eigs(*, left = false, overwrite_a = false)
eigs(*, need_left : Bool, need_right : Bool, overwrite_a = false)
eigs(*, b : Matrix(T), need_left : Bool, need_right : Bool, overwrite_a = false, overwrite_b = false) eigs, eigvals(*, overwrite_a = false) eigvals, expm(*, schur_fact = false) expm, flags : MatrixFlags flags, hcat(other) hcat, hessenberg
hessenberg(*, calc_q = false) hessenberg, hessenberg!
hessenberg!(*, calc_q = false) hessenberg!, inspect(io) inspect, inv inv, inv! inv!, kron(b : Matrix(T)) kron, lq(*, overwrite_a = false) lq, lq_r(*, overwrite_a = false) lq_r, lstsq(b : self, method : LSMethod = LSMethod::Auto, *, overwrite_a = false, overwrite_b = false, cond = -1) lstsq, lu(*, overwrite_a = false) lu, lu_factor : LUMatrix(T) lu_factor, lu_factor! : LUMatrix(T) lu_factor!, map(&) map, map!(&) map!, map_with_index(&) map_with_index, map_with_index!(&) map_with_index!, max(axis : Axis) max, min(axis : Axis) min, ncolumns : Int32 ncolumns, norm(kind : MatrixNorm = MatrixNorm::Frobenius) norm, nrows : Int32 nrows, pinv pinv, product(axis : Axis) product, ql(*, overwrite_a = false) ql, ql_r(*, overwrite_a = false) ql_r, qr(*, overwrite_a = false, pivoting = false) qr, qr_r(*, overwrite_a = false, pivoting = false) qr_r, qr_raw(*, overwrite_a = false, pivoting = false) qr_raw, qz(b, overwrite_a = false, overwrite_b = false) qz, rank(eps = self.tolerance, *, method : RankMethod = RankMethod::SVD, overwrite_a = false) rank, reduce(axis : Axis, initial, &) reduce, repmat(arows, acolumns) repmat, rows rows, rq(*, overwrite_a = false) rq, rq_r(*, overwrite_a = false) rq_r, save_csv(filename) save_csv, scale!(k : Number | Complex) scale!, schur(*, overwrite_a = false) schur, shape shape, sinhm sinhm, sinm sinm, size : Tuple(Int32, Int32) size, solve(b : self, *, overwrite_a = false, overwrite_b = false) solve, solvels(b : self, *, overwrite_a = false, overwrite_b = false, cond = -1) solvels, square? square?, sum(axis : Axis) sum, svd(*, overwrite_a = false) svd, svdvals(*, overwrite_a = false) svdvals, t t, t! t!, tanhm tanhm, tanm tanm, to_custom(io, prefix, columns_separator, rows_separator, postfix)
to_custom(prefix, columns_separator, rows_separator, postfix) to_custom, to_general to_general, to_imag to_imag, to_matlab(io)
to_matlab to_matlab, to_real to_real, to_s(io) to_s, to_unsafe to_unsafe, tolerance tolerance, tr_mult!(a : Matrix(T), *, alpha = 1.0, left = false) tr_mult!, trace trace, transpose transpose, tril(k = 0) tril, tril!(k = 0) tril!, triu(k = 0) triu, triu!(k = 0) triu!, vcat(other) vcat
Class methods inherited from class LA::Matrix(T)
arange(start_val : T, end_val : T, delta = 1.0)
arange,
block_diag(*args)
block_diag,
circulant(c)
circulant,
column(values)
column,
companion(a)
companion,
dft(n, scale : DFTScale = DFTScale::None)
dft,
diag(nrows, ncolumns, value : Number | Complex)diag(nrows, ncolumns, values)
diag(values)
diag(nrows, ncolumns, &) diag, eye(n) eye, fiedler(values) fiedler, from_custom(str : String, prefix, columns_separator, rows_separator, postfix)
from_custom(io, prefix, columns_separator, rows_separator, postfix) from_custom, from_matlab(s) from_matlab, hadamard(n) hadamard, hankel(column : Indexable | Matrix, row : Indexable | Matrix | Nil = nil) hankel, helmert(n, full = false) helmert, hilbert(n) hilbert, identity(n) identity, invhilbert(n) invhilbert, invpascal(n, kind : PascalKind = PascalKind::Symmetric) invpascal, kron(a, b) kron, leslie(f, s) leslie, load_csv(filename) load_csv, ones(nrows, ncolumns) ones, pascal(n, kind : PascalKind = PascalKind::Symmetric) pascal, rand(nrows, ncolumns, rng = Random::DEFAULT) rand, repmat(a : Matrix(T), nrows, ncolumns) repmat, row(values) row, toeplitz(column : Indexable | Matrix, row : Indexable | Matrix | Nil = nil) toeplitz, tri(nrows, ncolumns, k = 0) tri, zeros(nrows, ncolumns) zeros
Instance methods inherited from module Enumerable(T)
product(initial : Complex)product(initial : Complex, &) product
Constructor Detail
Creates matrix with given size and populate elements from values
if col_major
is true, values
content is just copied to #raw
,
otherwise a conversion from row-major form is performed
Example:
values = [1, 2, 3, 4]
a = GMat.new(2, 2, values)
a.to_aa # => [[1,2],[3,4]]
b = GMat.new(2, 2, values, col_major: true)
b.to_aa # => [[1,3],[2,4]]
Creates zero-initialized matrix of given size
Example: LA::GMat.new(4,4)
Creates matrix of given size and then call block to initialize each element
Example: LA::GMat.new(4,4){|i,j| i+j }
Creates matrix from any Indexable
of Indexable
s
Example:
m = GMat.new([
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
[10, 11, 12],
])
Class Method Detail
Creates matrix from a number of columns
Example:
a = GMat.columns([1, 2, 3, 4], [5, 6, 7, 8])
a.to_aa # => [[1, 5], [2, 6], [3, 7], [4, 8]]
Returns diagonal matrix of given size with diagonal elements taken from array values
Returns diagonal matrix of given size with diagonal elements equal to block value
Creates matrix from a number of rows
Example:
a = GMat.rows([1, 2, 3, 4], [5, 6, 7, 8])
a.to_aa # => [[1,2,3,4], [5,6,7,8]]
Instance Method Detail
Concatenate matrix adding another matrix by dimension
Axis::Rows
(horizontal) or Axis::Columns
(vertical)
Conjurgate transposes matrix inplace
Currently, transpose of non-square matrix still allocates temporary buffer
Returns a matrix with different nrows and ncolumns but same elements (total number of elements must not change)
if col_major
is true, just nrows and ncolumns are changed, data kept the same
Otherwise, elements are reordered to emulate row-major storage
Example:
a = GMat[[1, 2, 3], [4, 5, 6]]
a.reshape(2, 3).to_aa # => [[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]]
b = GMat[[1, 2, 3], [4, 5, 6]]
this is because in-memory order of values is (1, 4, 2, 5, 3, 6)
b.reshape(2, 3, col_major: true).to_aa # => [[1.0, 5.0], [4.0, 3.0], [2.0, 6.0]]
Changes nrows and ncolumns of matrix (total number of elements must not change)
if col_major
is true, just nrows and ncolumns are changed, data kept the same
Otherwise, elements are reordered to emulate row-major storage
Example:
a = GMat[[1, 2, 3], [4, 5, 6]]
a.reshape!(2, 3)
a.to_aa # => [[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]]
b = GMat[[1, 2, 3], [4, 5, 6]]
b.reshape!(2, 3, col_major: true)
this is because in-memory order of values is (1, 4, 2, 5, 3, 6)
b.to_aa # => [[1.0, 5.0], [4.0, 3.0], [2.0, 6.0]]
Change number of rows and columns in matrix.
if new number is higher zero elements are added, if new number is lower, exceeding elements are lost
Converts matrix to plain array of elements
if col_major
is true, elements are returned as stored inplace,
otherwise row-major storage is emulated
Converts matrix to array of array of elements
if col_major
is true, elements are returned as stored inplace,
otherwise row-major storage is emulated
Example:
a = GMat[[1, 2], [3, 4]]
a.to_aa # => [[1.0, 2.0],[3.0, 4.0]]
a.to_aa(col_major: true) # => [[1.0, 3.0],[2.0, 4.0]]
transposes matrix inplace
Currently, transpose of non-square matrix still allocates temporary buffer
sets element at row i and column j to value, without performing any checks