numpy多重矩阵乘法

时间:2012-08-21 12:47:33

标签: numpy scipy

如果我有像$(x- \ mu)^ T \ Sigma ^ { - 1}(x- \ mu)$这样的矩阵产品,那么为numpy数组写这个的方法就是reduce(numpy.dot,((x-mu).T, scipy.linalg.inv(Sigma), x-mu)) ? Matlab和R语法是如此简单,以至于numpy没有等效的运算符语法似乎有点奇怪。

3 个答案:

答案 0 :(得分:4)

您也可以尝试:

x = x.view(np.matrix)
isigma = scipy.linalg.inv(Sigma).view(np.matrix)
result = (x-mu).T * isigma * (x-mu)

通过将数组视图作为矩阵,您可以使用.__mul__ np.matrix运算符*,当您使用{{1}}时,它会执行矩阵乘法。

答案 1 :(得分:1)

主要问题是*已被定义为numpy数组的元素乘法,并且没有其他明显的运算符可用于矩阵乘法。正如皮埃尔所建议的那样,解决方案是转换为numpy矩阵,其中*表示矩阵乘法。

有一些建议要向Python添加新的运算符类型(例如PEP 225),这样可以允许像~*这样的表示矩阵乘法。

答案 2 :(得分:1)

你也可以写(Numpy> = 1.4左右)

from scipy.linalg import inv

(x - mu).T.dot(inv(Sigma)).dot(x - mu)

正如另一个答案中所提到的,有限的运算符语法是由于Python中可用的运算符数量有限。