在Ruby 1.9.3中,向量不能乘以另一个向量?

时间:2013-05-16 10:36:44

标签: ruby vector

我正在Ruby中实现基本的机器学习算法,1.9.3。

我尝试将类Matrix和Vector用于算术。但是,当我试图将矢量乘以另一个矢量时,它说 “ExceptionForMatrix :: ErrOperationNotDefined:无法定义操作(*):Vector op Vector”。

但Ruby的文档,1.9,3 says

  

*(x)将向量乘以x,其中x是数字或另一个向量。

我的代码和输出在这里:

> a = Vector[1,2,3]
=> Vector[1, 2, 3]
> b = Vector[1,2,3]
=> Vector[1, 2, 3]
> a * b
ExceptionForMatrix::ErrOperationNotDefined: Operation(*) can't be defined: Vector op Vector

2 个答案:

答案 0 :(得分:3)

尽管文档明确指出你可以将一个向量乘以另一个向量,但它是无意义的,并且,正如zisasign指出的那样,实现不允许它。

但是,您可以使用covector方法将矢量转换为单行矩阵,然后可以将其相乘以进行有意义的计算:

a = Vector[1, 2, 3]
b = Vector[10, 100, 1000]

a.covector * b
# => Vector[3210]

a * b.covector
# => Matrix[[10, 100, 1000], [20, 200, 2000], [30, 300, 3000]]

答案 1 :(得分:2)

文档错误。当您查看文档中链接的代码时,有

def *(x)
  case x
  when Numeric
    els = @elements.collect{|e| e * x}
    Vector.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

无论如何,乘以(如矩阵乘法)a(列 - )向量乘(列)向量都没有意义。也许你想要inner_product

相关问题