使用NumPy替换Python中的嵌套循环

使用NumPy替换Python中的嵌套循环,python,arrays,python-3.x,numpy,Python,Arrays,Python 3.x,Numpy,所以我有这6个嵌套循环,它们的目的只是在不同的索引上乘和加数组X和Y,得到数组Z 将numpy导入为np 尺寸a=5 尺寸b=9 Z=np.零((尺寸a,尺寸b,尺寸b,尺寸a)) X=np.arange(2025)。重塑(尺寸a、尺寸b、尺寸b、尺寸a) Y=np.arange(2025)。重塑(尺寸a、尺寸b、尺寸b、尺寸a) 对于范围内的i(0,尺寸a): 对于范围内的j(0,尺寸a): 对于范围内的a(0,尺寸b): 对于范围内的b(0,尺寸b): 对于范围内的m(0,尺寸a): 对于范

所以我有这6个嵌套循环,它们的目的只是在不同的索引上乘和加数组
X
Y
,得到数组
Z

将numpy导入为np
尺寸a=5
尺寸b=9
Z=np.零((尺寸a,尺寸b,尺寸b,尺寸a))
X=np.arange(2025)。重塑(尺寸a、尺寸b、尺寸b、尺寸a)
Y=np.arange(2025)。重塑(尺寸a、尺寸b、尺寸b、尺寸a)
对于范围内的i(0,尺寸a):
对于范围内的j(0,尺寸a):
对于范围内的a(0,尺寸b):
对于范围内的b(0,尺寸b):
对于范围内的m(0,尺寸a):
对于范围内的e(0,尺寸b):
Z[i,a,b,j]+=X[m,e,b,j]*Y[m,e,a,i]*2
有没有一种方法可以使用NumPy只需几行代码就可以编写它?这些嵌套循环的计算工作量是巨大的。我觉得NumPy可以显著优化它。

您当然可以使用:

转化为

Z = np.einsum('mebj,meai->iabj', X,Y) * 2

这太棒了!我检查了计算时间:
6个嵌套循环:0.14539456367492676
np.einsum:0.000209808349609375
也与
np.einsum('mebj,meai,…->iabj',X,Y,2)
相同。不过,我不确定这是否更快。
Z = np.einsum('mebj,meai->iabj', X,Y) * 2