我有一个矩阵M
,M.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的每个元素都是sin
和cos
的不同组合。
接下来我x
,x.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?
答案 0 :(得分:1)
忘记如何计算M
和x
之类的内容,并专注于乘法:
我想知道如何计算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个维度。