我想完全摆脱代码中的for循环。
我有一个维数为OxMxN的复数个numpy数组 stack1 。这是一维MxN数组的堆栈,它们沿第一维堆积。对于我们称为 A 的每个MxN数组,我要计算矩阵乘法:
for k in range(stack1.shape[0]):
A=stack1[k,:,:]
newstack[k,:,:]=A.dot( numpy.conj(numpy.transpose(A)) )
我尝试过
newstack = stack1 @ np.conj(stack1.T)
但是我遇到了一个问题,因为尺寸不匹配
答案 0 :(得分:3)
我们可以使用einsum
-
np.einsum('ijk,ilk->ijl',stack1,np.conj(stack1))
我们也可以使用np.matmul
-
np.matmul(stack1,np.conj(stack1).swapaxes(1,2))
在Python 3.x
上,用@
运算符简化-
stack1 @ np.conj(stack1).swapaxes(1,2)
答案 1 :(得分:0)
只需尝试纠正您的for循环
a=[]
for k in range(stack1.shape[0]):
A=stack1[k,:,:]
a.append(A.dot( numpy.conj(numpy.transpose(A)) ))
np.array(a)
Out[399]:
array([[[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]],
[[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]]])