内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用
我想做以下几点:
for i in dimension1: for j in dimension2: for k in dimension3: for l in dimension4: B[k,l,i,j] = A[i,j,k,l]
最后,A和B都包含相同的信息,但索引不同。
我必须指出,维数1、2、3和4可以是相同的,也可以是不同的。
In [195]: A = np.random.random((2,4,3,5)) In [196]: B = np.einsum('klij->ijkl', A) In [197]: A.shape Out[197]: (2, 4, 3, 5) In [198]: B.shape Out[198]: (3, 5, 2, 4) In [199]: import itertools as IT In [200]: all(B[k,l,i,j] == A[i,j,k,l] for i,j,k,l in IT.product(*map(range, A.shape))) Out[200]: True
在numpy中这样做的标准方法是使用np.transpose
In [16]: a = np.empty((2, 3, 4, 5)) In [17]: b = np.transpose(a, (2, 3, 0, 1)) In [18]: b.shape Out[18]: (4, 5, 2, 3)