lib/hamster/matrix.rb in hamster-matrix-1.0.0 vs lib/hamster/matrix.rb in hamster-matrix-2.0.0
- old
+ new
@@ -15,68 +15,77 @@
# @return [Hamster::Matrix]
def self.[](*array)
Hamster::Matrix.new(array)
end
+ # @return [Hamster::Matrix]
def self.identity(n)
return new if n == 0
new(::Matrix.identity(n).row_vectors)
end
+ # @return [Hamster::Matrix]
def self.build(row_count, column_count = row_count, &block)
matrix = ::Matrix.build(row_count, column_count, &block)
new(matrix.row_vectors)
end
+ # @return [Hamster::Matrix]
def self.column_vector(array)
matrix = ::Matrix.column_vector(array)
new(matrix.row_vectors)
end
+ # @return [Hamster::Matrix]
def self.columns(array)
matrix = ::Matrix.columns(array)
new(matrix.row_vectors)
end
+ # @return [Hamster::Matrix]
def self.diagonal(*array)
matrix = ::Matrix.diagonal(*array)
new(matrix.row_vectors)
end
+ # @return [Hamster::Matrix]
def self.row_vector(row)
matrix = ::Matrix.row_vector(row)
new(matrix.row_vectors)
end
+ # @return [Hamster::Matrix]
def self.rows(row)
matrix = ::Matrix.rows(row)
new(matrix.row_vectors)
end
+ # @return [Hamster::Matrix]
def self.scalar(n, value)
matrix = ::Matrix.scalar(n, value)
new(matrix.row_vectors)
end
class << self
alias_method :I, :identity
alias_method :unit, :identity
end
- def initialize(array = Hamster.vector)
+ def initialize(array = Hamster::Vector[])
enumerable_check!(array)
width = nil
- @row_vectors = Hamster.vector(*array.map do |a|
+ @row_vectors = Hamster::Vector[*array.map do |a|
enumerable_check!(a)
width ||= a.size
unless(width == a.size)
raise ExceptionForMatrix::ErrDimensionMismatch.new("row size differs (#{a.size} should be #{width})")
end
- Hamster.vector(*a)
- end)
+ Hamster::Vector[*a]
+ end]
end
+ # @return Boolean
def ==(other)
return false unless other.is_a? Hamster::Matrix
self.row_vectors == other.row_vectors
end
alias_method :eql?, :==
@@ -99,11 +108,10 @@
# b = a.set(2,2,'foo')
# puts b
# # [[1, 0, 0]
# # [0, 1, 0]
# # [0, 0, "foo"]]
-
# puts a
# # [[1, 0, 0]
# # [0, 1, 0]
# # [0, 0, 1]]
#
@@ -118,20 +126,23 @@
end
new_row = old_row.set(j, value)
Hamster::Matrix.new(row_vectors.set(i, new_row))
end
+ # @return [Hamster::Vector]
def row(i)
row_vectors[i]
end
+ # @return [Fixnum]
def column_count
return 0 if row_vectors.size == 0
return row_vectors.first.size
end
alias_method :column_size, :column_count
+ # @return [Fixnum]
def row_count
return row_vectors.size
end
alias_method :row_size, :row_count
@@ -140,55 +151,66 @@
new_rows = row_vectors.map { |row| row.map(&block) }
return Hamster::Matrix.new(new_rows)
end
alias_method :map, :collect
+ # @return [Fixnum]
def column(n)
row_vectors.map { |row| row[n] }
end
+ # @return [Hamster::Vector]
def column_vectors
- Hamster.vector(*(0..row_vectors.size).map { |n| column(n) })
+ Hamster::Vector[*(0..row_vectors.size).map { |n| column(n) }]
end
+ # @return [Boolean]
def empty?
row_vectors.size == 0
end
+ # @return [Hash]
def hash
row_vectors.hash
end
+ # @return [String]
def inspect
if empty?
"#{self.class}.empty"
else
"#{self.class}#{row_string(19)}"
end
end
+ # @return [Boolean]
def square?
row_count == column_count
end
+ # @return [Array]
def to_a
row_vectors.map { |row| row.to_a }.to_a
end
+ # @return [String]
def to_s
row_string(1)
end
+ # @return [::Matrix]
def to_matrix
::Matrix[to_a]
end
+ # @return [Boolean]
def zero?
row_vectors.all? do |row|
row.all? { |elem| elem.is_a?(Numeric) && elem.zero? }
end
end
+ # @return [Hamster::Vector]
attr_reader :row_vectors
private
# @private