In: |
matrix.rb
|
Parent: | Object |
Creates a vector from an Array. The optional second argument specifies whether the array itself or a copy is used internally.
# File matrix.rb, line 1055 def Vector.elements(array, copy = true) new(:init_elements, array, copy) end
For internal use.
# File matrix.rb, line 1062 def initialize(method, array, copy) self.send(method, array, copy) end
For internal use.
# File matrix.rb, line 1069 def init_elements(array, copy) if copy @elements = array.dup else @elements = array end end
Returns element number i (starting at zero) of the vector.
# File matrix.rb, line 1082 def [](i) @elements[i] end
Returns the number of elements in the vector.
# File matrix.rb, line 1089 def size @elements.size end
Iterate over the elements of this vector and v in conjunction.
# File matrix.rb, line 1100 def each2(v) # :yield: e1, e2 Vector.Raise ErrDimensionMismatch if size != v.size 0.upto(size - 1) do |i| yield @elements[i], v[i] end end
Collects (as in Enumerable#collect) over the elements of this vector and v in conjunction.
# File matrix.rb, line 1112 def collect2(v) # :yield: e1, e2 Vector.Raise ErrDimensionMismatch if size != v.size (0 .. size - 1).collect do |i| yield @elements[i], v[i] end end
Returns true iff the two vectors have the same elements in the same order.
# File matrix.rb, line 1127 def ==(other) return false unless Vector === other other.compare_by(@elements) end
Multiplies the vector by x, where x is a number or another vector.
# File matrix.rb, line 1162 def *(x) case x when Numeric els = @elements.collect{|e| e * x} Vector.elements(els, false) when Matrix Matrix.column_vector(self) * x else s, x = x.coerce(self) s * x end end
Returns the inner product of this vector with the other.
Vector[4,7].inner_product Vector[10,1] => 47
# File matrix.rb, line 1223 def inner_product(v) Vector.Raise ErrDimensionMismatch if size != v.size p = 0 each2(v) { |v1, v2| p += v1 * v2 } p end
Like Array#collect.
# File matrix.rb, line 1237 def collect # :yield: e els = @elements.collect { |v| yield v } Vector.elements(els, false) end
Like Vector#collect2, but returns a Vector instead of an Array.
# File matrix.rb, line 1249 def map2(v) # :yield: e1, e2 els = collect2(v) { |v1, v2| yield v1, v2 } Vector.elements(els, false) end
Returns the modulus (Pythagorean distance) of the vector.
Vector[5,8,2].r => 9.643650761
# File matrix.rb, line 1261 def r v = 0 for e in @elements v += e*e end return Math.sqrt(v) end
Creates a single-row matrix from this vector.
# File matrix.rb, line 1276 def covector Matrix.row_vector(self) end
Returns the elements of the vector in an array.
# File matrix.rb, line 1283 def to_a @elements.dup end
FIXME: describe Vector#coerce.
# File matrix.rb, line 1290 def coerce(other) case other when Numeric return Scalar.new(other), self else raise TypeError, "#{self.class} can't be coerced into #{other.class}" end end