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