我正在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
答案 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
?