如何在沒有回圈的情況下將 numpy nd 陣列轉換為 (n-1)d 的串列
假設我們有一個陣列 3d numpy 陣列
arr3d = np.random.randint(1, 100, size=7 * 3 * 6).reshape((7, 3, 6))
帶回圈(慢速解決方案):
arr_what_i_want= []
for i in range(7):
arr2d = arr3d[i]
arr_what_i_want.append([arr2d])
pass
如何在沒有回圈的情況下獲得“arr_what_i_want”?
uj5u.com熱心網友回復:
列出第一個維度:
arr_what_i_want = [*arr3d]
或者
arr_what_i_want = list(arr3d)
uj5u.com熱心網友回復:
@阿蘭。那不正確
在我運行后的示例代碼中,我們得到這樣的“arr_what_i_want”
[[array([[20, 27, 46, 61, 76, 92],
[12, 51, 25, 94, 94, 30],
[40, 70, 4, 52, 26, 29]])], [array([[78, 64, 16, 61, 40, 52],
[33, 90, 60, 47, 7, 5],
[57, 86, 67, 42, 38, 68]])], [array([[71, 58, 25, 89, 64, 31],
[34, 1, 36, 44, 51, 4],
[ 8, 30, 66, 65, 21, 47]])], [array([[47, 14, 60, 85, 5, 29],
[92, 20, 5, 10, 27, 29],
[14, 70, 14, 4, 30, 60]])], [array([[43, 16, 25, 22, 45, 28],
[81, 29, 20, 46, 10, 75],
[99, 75, 54, 97, 23, 73]])], [array([[44, 56, 4, 36, 99, 27],
[25, 22, 59, 62, 28, 48],
[39, 16, 46, 34, 5, 54]])], [array([[90, 19, 35, 25, 47, 77],
[38, 82, 39, 93, 35, 6],
[19, 87, 34, 7, 75, 13]])]]
你的方法得到這個:
[array([[20, 27, 46, 61, 76, 92],
[12, 51, 25, 94, 94, 30],
[40, 70, 4, 52, 26, 29]]), array([[78, 64, 16, 61, 40, 52],
[33, 90, 60, 47, 7, 5],
[57, 86, 67, 42, 38, 68]]), array([[71, 58, 25, 89, 64, 31],
[34, 1, 36, 44, 51, 4],
[ 8, 30, 66, 65, 21, 47]]), array([[47, 14, 60, 85, 5, 29],
[92, 20, 5, 10, 27, 29],
[14, 70, 14, 4, 30, 60]]), array([[43, 16, 25, 22, 45, 28],
[81, 29, 20, 46, 10, 75],
[99, 75, 54, 97, 23, 73]]), array([[44, 56, 4, 36, 99, 27],
[25, 22, 59, 62, 28, 48],
[39, 16, 46, 34, 5, 54]]), array([[90, 19, 35, 25, 47, 77],
[38, 82, 39, 93, 35, 6],
[19, 87, 34, 7, 75, 13]])]
不同的形狀,如你所見
用熊貓更清楚地說明:
print(pd.DataFrame(arr_what_i_want))
0
0 [[22, 62, 18, 15, 7, 32], [84, 28, 34, 99, 66, 65], [10, 18, 52, 73, 11, 75]]
1 [[86, 47, 69, 47, 57, 40], [63, 20, 32, 68, 1, 90], [56, 81, 1, 22, 75, 51]]
2 [[40, 9, 25, 54, 99, 20], [76, 43, 96, 80, 67, 49], [86, 96, 72, 74, 16, 14]]
3 [[97, 49, 49, 26, 21, 61], [56, 63, 57, 80, 22, 95], [13, 5, 63, 39, 86, 5]]
4 [[44, 80, 89, 79, 85, 60], [34, 15, 61, 78, 71, 4], [45, 30, 38, 5, 38, 1]]
5 [[6, 6, 3, 11, 18, 90], [8, 71, 3, 1, 40, 5], [97, 8, 81, 94, 74, 21]]
6 [[81, 85, 68, 70, 35, 19], [10, 52, 43, 94, 34, 95], [60, 2, 74, 66, 9, 35]]
但是如果替換你的 arr pandas 會引發錯誤:
ValueError: Must pass 2-d input. shape=(7, 3, 6)
uj5u.com熱心網友回復:
讓我猜一下這個:
arr3d = np.random.randint(1, 100, size=7 * 3 * 6).reshape((7, 3, 6))
arr2d = arr3d.reshape(arr3d.shape[0], (arr3d.shape[1]*arr3d.shape[2]))
print(arr2d)
輸出:
[[68 29 30 22 13 93 93 91 8 82 34 48 41 83 72 75 25 38]
[12 43 4 76 21 1 26 26 84 10 76 42 49 2 3 3
3 3 3 8 3 97 11 95 37 61 42 18 31 3 16 67 86]
[94 73 2 26 23 94 69 49 40 39 60 79 84 39 57 94 76 16]
[83 3 5 1 2 8 4 5 9 5 49 81]
[48 56 73 51 63 88 31 57 12 92 6 25 98 46 67 38 73 60]
[42 8 47 13 76 40 71 54 99 58 47 6 73 ] 3 2
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/324087.html
