The Vector
class represents a mathematical vector, which is
useful in its own right, and also constitutes a row or column of a Matrix.
Method Catalogue
To create a Vector:
-
::elements(array, copy = true)
To access elements:
To enumerate the elements:
Vector arithmetic:
-
#*(x) “is matrix or number”
-
#+(v)
-
#-(v)
Vector functions:
Conversion to other data types:
String representations:
- CLASS Vector::ZeroVectorError
- #
- C
- E
- H
- I
- M
- N
- R
- S
- T
[R] | elements | INSTANCE CREATION |
Creates a vector from an Array. The optional second argument specifies whether the array itself or a copy is used internally.
::new is private; use Vector[] or ::elements to create.
Multiplies the vector by x
, where x
is a number
or another vector.
# File lib/matrix.rb, line 1676 def *(x) case x when Numeric els = @elements.collect{|e| e * x} self.class.elements(els, false) when Matrix Matrix.column_vector(self) * x when Vector Vector.Raise ErrOperationNotDefined, "*", self.class, x.class else apply_through_coercion(x, __method__) end end
Vector addition.
# File lib/matrix.rb, line 1693 def +(v) case v when Vector Vector.Raise ErrDimensionMismatch if size != v.size els = collect2(v) {|v1, v2| v1 + v2 } self.class.elements(els, false) when Matrix Matrix.column_vector(self) + v else apply_through_coercion(v, __method__) end end
Vector subtraction.
# File lib/matrix.rb, line 1711 def -(v) case v when Vector Vector.Raise ErrDimensionMismatch if size != v.size els = collect2(v) {|v1, v2| v1 - v2 } self.class.elements(els, false) when Matrix Matrix.column_vector(self) - v else apply_through_coercion(v, __method__) end end
Returns true
iff the two vectors have the same elements in the
same order.
Returns element number i
(starting at zero) of the vector.
Return a copy of the vector.
The coerce method provides support for Ruby type coercion. This coercion mechanism is used by Ruby to handle mixed-type numeric operations: it is intended to find a compatible common type between the two operands of the operator. See also Numeric#coerce.
Collects (as in Enumerable#collect) over the
elements of this vector and v
in conjunction.
# File lib/matrix.rb, line 1629 def collect2(v) # :yield: e1, e2 raise TypeError, "Integer is not like Vector" if v.kind_of?(Integer) Vector.Raise ErrDimensionMismatch if size != v.size return to_enum(:collect2, v) unless block_given? Array.new(size) do |i| yield @elements[i], v[i] end end
Creates a single-row matrix from this vector.
Iterate over the elements of this vector
Iterate over the elements of this vector and v
in conjunction.
# File lib/matrix.rb, line 1615 def each2(v) # :yield: e1, e2 raise TypeError, "Integer is not like Vector" if v.kind_of?(Integer) Vector.Raise ErrDimensionMismatch if size != v.size return to_enum(:each2, v) unless block_given? size.times do |i| yield @elements[i], v[i] end self end
Return a hash-code for the vector.
Returns the inner product of this vector with the other.
Vector[4,7].inner_product Vector[10,1] => 47
Overrides Object#inspect
Returns the modulus (Pythagorean distance) of the vector.
Vector[5,8,2].r => 9.643650761
Returns a new vector with the same direction but with norm 1.
v = Vector[5,8,2].normalize
# => Vector[0.5184758473652127, 0.8295613557843402, 0.20739033894608505]
v.norm => 1.0
Returns the number of elements in the vector.
Returns the elements of the vector in an array.
Overrides Object#to_s