numpy多重矩阵乘法

numpy多重矩阵乘法,numpy,scipy,Numpy,Scipy,如果我有一个像$x-\mu^T\Sigma^{-1}x-\mu$这样的矩阵积,那么写numpy数组的方法是reduceEnumpy.dot,x-mu.T,scipy.linalg.invSigma,x-mu吗?Matlab和R语法简单得多,因此numpy没有等效的运算符语法似乎有点奇怪。您也可以尝试: x = x.view(np.matrix) isigma = scipy.linalg.inv(Sigma).view(np.matrix) result = (x-mu).T * isigma

如果我有一个像$x-\mu^T\Sigma^{-1}x-\mu$这样的矩阵积,那么写numpy数组的方法是reduceEnumpy.dot,x-mu.T,scipy.linalg.invSigma,x-mu吗?Matlab和R语法简单得多,因此numpy没有等效的运算符语法似乎有点奇怪。

您也可以尝试:

x = x.view(np.matrix)
isigma = scipy.linalg.inv(Sigma).view(np.matrix)
result = (x-mu).T * isigma * (x-mu)
通过将数组视为矩阵,您可以使用np.matrix的.uuuuu mul uuuu运算符,当您使用*

时,它会执行矩阵乘法,您还可以尝试:

x = x.view(np.matrix)
isigma = scipy.linalg.inv(Sigma).view(np.matrix)
result = (x-mu).T * isigma * (x-mu)
通过将数组视为矩阵,可以使用np.matrix的.uuuuu mul uuuu运算符,它在使用*

时执行矩阵乘法。主要问题是,对于numpy数组,*已定义为元素乘法,并且没有其他明显的用于矩阵乘法的运算符。正如Pierre所建议的,解决方案是转换成numpy矩阵,其中*表示矩阵乘法

有一些建议向Python中添加新的运算符类型,例如允许~*之类的东西表示矩阵乘法。

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


有一些建议将新的运算符类型添加到Python中,例如允许~*之类的东西表示矩阵乘法。

您也可以编写Numpy>=1.4左右

from scipy.linalg import inv

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

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

您也可以编写Numpy>=1.4左右

from scipy.linalg import inv

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

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

如果我没记错的话,没有内存开销,因为view不会创建新对象?@跛脚Lambda:没错,这就是view的美妙之处。内存空间已经分配了,你只需以不同的方式呈现它。如果我没记错的话,没有内存开销,因为视图不会创建新对象?@跛脚的Lambda:没错,这就是视图的美妙之处。内存空间已分配,您只需以不同的方式呈现即可。