Python中的多维矩阵乘法

时间:2014-12-25 16:37:18

标签: python numpy

我有一个矩阵MM.shape = (4, 4)M[1,1].shape = (600,300)。 通过传递M[i,j]来计算每个meshgrid。例如

x=300
t=np.linspace(0, np.pi, num=x)
p=np.linspace(0,2*np.pi,num=2*x)
[T,P]=np.meshgrid(t,p)
M[1,1]=np.sin(T)*np.cos(P)

M的每个元素都是sincos的不同组合。

接下来我xx.shape = (4, 600, 300)。 x计算如下:

for j in xrange(n):
    x[0]+=np.sin(T)*np.sin(time[j])
    x[1]+=np.sin(T)*np.sin(time[j])
    x[2]+=np.sin(P)*np.cos(time[j])
    x[3]+=np.sin(P)*np.cos(time[j])

其中time[j]是某个数字。

我想知道如何计算transpose(x).M.X。所以这应该是一个形状(600,300)。我计算了a = np.tensordot(M,x,axes=[1,0]),得出a.shape = (4,600,300)

首先,这是正确的吗?其次。我如何进行转置和计算转置(x).M.x?

1 个答案:

答案 0 :(得分:1)

忘记如何计算Mx之类的内容,并专注于乘法:

  

我想知道如何计算transpose(x).M.X。所以这应该是一个形状(600,300)。我计算了a = np.tensordot(Mat,x,axes = [1,0]),它产生a.shape =(4,600,300)。

M的总形状是多少? wwii的猜测最有意义(4,4,600,300)

您说x(4, 600,300)。什么是transpose(x)?转置是针对2个轴定义的,但与3不明确。

什么是X

什么是Mat?您np.tensordot(Mat,x,[1,0])中唯一有效的是(4,4)

但是,让我做一个有根据的猜测,你需要X.T * M * X,但添加了(600,300)维度。

 np.einsum('inm,ijnm,jnm->nm', X, M, X)

也就是说,您希望X的点产品具有M的第一个暗点,而另一个点积为X且第二个暗点为M,没有改变最后2个维度。