linear_algebra/matrix_shapes.rb

tests/_examples/linear_algebra/matrix_shapes.rb in the metorex repository.

require 'matrix'

# A subscript may be written across several lines.
wide = Matrix[
  [1, 2, 3],
  [4, 5, 6]
]
p wide.row_size
p wide.column_size

# An empty matrix keeps the shape it was built with.
empty_rows = Matrix.columns([[], [], []])
p empty_rows.inspect
p empty_rows.row_size
p empty_rows.column_size
p empty_rows.transpose.inspect
p Matrix.empty(0, 42).eql?(Matrix.empty(0, 6))

column = Matrix.column_vector([])
p [column.row_size, column.column_size]

p wide.minor(0, 1, 0, 2).inspect
p wide.minor(1, 20, 1, 1).inspect
p wide.minor(2, 10, 1, 10).inspect
p wide.minor(0, 1, 0, -1)

p wide.find_index(5)
p wide.find_index(:diagonal).to_a
p wide.find_index { |value| value > 4 }

counted = Matrix.build(2, 3) { |row, column| row * 3 + column }
p counted.inspect
p Matrix.build(0, 3) { 1 }.column_size

flat = Matrix.empty(0, 2) * Matrix.build(2, 4) { 1 }
p [flat.row_size, flat.column_size]

pairs = []
Vector[1, 2, 3].each2([7, 8, 9]) { |mine, theirs| pairs.push([mine, theirs]) }
p pairs
p Vector[Complex(1, 2)].inner_product(Vector[Complex(3, 4)])

p Matrix.respond_to?(:new)
begin
  Matrix.new([[1]])
rescue NoMethodError => error
  p error.class
end

Output:

2
3
"Matrix.empty(0, 3)"
0
3
"Matrix.empty(3, 0)"
false
[0, 1]
"Matrix[[1, 2]]"
"Matrix[[5]]"
"Matrix.empty(0, 2)"
nil
[1, 1]
[1, 5]
[1, 1]
"Matrix[[0, 1, 2], [3, 4, 5]]"
3
[0, 4]
[[1, 7], [2, 8], [3, 9]]
(11+2i)
false
NoMethodError