转置 ND 列表列表

Transpose ND list of lists

1.I使用cv2.imread读取numpy数组中的大图(1234*1624*3)

2.I 使用 cv2.dnn.blobFromImage 将其转换为 (1,3,1234,1624) numpy 数组

3.I 使用 tolist() 将其转换为 lists

中的 4D 列表

我的问题:

如何转置此列表的轴

从 (1,3,1234,1624) 到 (1,1234,1624,3)?

我先尝试 np.transpose(image, (0, 2, 3, 1)),然后再尝试 tolist(),但速度似乎很慢。因此,我想以列表形式进行转置。

我检查了下面的问题似乎很快但只能转置2D列表 Transpose list of lists

非常感谢!!

更新:

我有一个名为 temp 的列表。

len(temp)=1 len(temp[0])=3 len(temp[0][0])=1234 len(temp[0][0][0])=1624

我想将它的轴转置为

len(temp)=1 len(temp[0])=1234 len(temp[0][0])=1624 len(temp[0][0][0])=3

temp1=list(map(list, zip(*temp))怎么办?

可以做到 numpy-less 并且纯粹是功能性的,但并不漂亮:

from itertools import starmap, repeat

a = np.ones((1,3,1234,1624)).tolist()
b = list(map(list, map(map, repeat(list), map(starmap, repeat(zip), starmap(zip, a)))))
np.shape(b)
# (1, 1234, 1624, 3)