[英]How to transpose a 3d/2d list?
這是我的清單:
[[[22, 13, 17, 11, 0],
[8, 2, 23, 4, 24],
[21, 9, 14, 16, 7],
[6, 10, 3, 18, 5],
[1, 12, 20, 15, 19]],
[[3, 15, 0, 2, 22],
[9, 18, 13, 17, 5],
[19, 8, 7, 25, 23],
[20, 11, 10, 24, 4],
[14, 21, 16, 12, 6]],
[[14, 21, 17, 24, 4],
[10, 16, 15, 9, 19],
[18, 8, 23, 26, 20],
[22, 11, 13, 6, 5],
[2, 0, 12, 3, 7]]]
我想要的轉置列表是這樣的:
[[[22, 8, 21, 6, 1],
[13, 2, 9, 10, 12],
[17, 23, 14, 3, 20],
[11, 4, 16, 18, 15],
[0, 24, 7, 5, 19]],
[[3, 9, 19, 20, 14],
[15, 18, 8, 11, 21],
[0, 13, 7, 10, 16],
[2, 11, 10, 24, 12],
[22, 21, 16, 4, 6]],
[[14, 10, 18, 22, 2],
[21, 16, 8, 11, 0],
[17, 15, 23, 13, 12],
[24, 9, 26, 6, 3],
[4, 19, 20, 5, 7]]]
我該怎么做? 任何幫助將不勝感激(不確定這是 3d 列表還是 2d 列表)
每個列表項由一個空行分隔,我將其稱為一個組(5 個,因為每個組中有 5 個不同的列表)我嘗試使用 Numpy 的轉置、arange 等。但是在使用 Numpy 的轉置、arange 等; 以 3 個一組的形式返回所有內容。而且它們的順序也錯誤。
只需切換第一和第二軸:
import numpy as np
a = np.array(
[[[22, 13, 17, 11, 0],
[8, 2, 23, 4, 24],
[21, 9, 14, 16, 7],
[6, 10, 3, 18, 5],
[1, 12, 20, 15, 19]],
[[3, 15, 0, 2, 22],
[9, 18, 13, 17, 5],
[19, 8, 7, 25, 23],
[20, 11, 10, 24, 4],
[14, 21, 16, 12, 6]],
[[14, 21, 17, 24, 4],
[10, 16, 15, 9, 19],
[18, 8, 23, 26, 20],
[22, 11, 13, 6, 5],
[2, 0, 12, 3, 7]]])
print(np.swapaxes(a, 1, 2))
可以使用np.swapaxes(a, 1, 2)
https://numpy.org/doc/stable/reference/generated/numpy.swapaxes.html
這也適用於列表,而不僅僅是 numpy arrays。
其他答案涉及相關的 numpy 方法。 這是一個列表理解(只是為了好玩)以獲得與np.swapaxes(lst, 1, 2)
相同的結果:
out = [[[row[i] for row in l] for i in range(len(l))] for l in my_list]
Output:
[[[22, 8, 21, 6, 1],
[13, 2, 9, 10, 12],
[17, 23, 14, 3, 20],
[11, 4, 16, 18, 15],
[0, 24, 7, 5, 19]],
[[3, 9, 19, 20, 14],
[15, 18, 8, 11, 21],
[0, 13, 7, 10, 16],
[2, 17, 25, 24, 12],
[22, 5, 23, 4, 6]],
[[14, 10, 18, 22, 2],
[21, 16, 8, 11, 0],
[17, 15, 23, 13, 12],
[24, 9, 26, 6, 3],
[4, 19, 20, 5, 7]]]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.