假設我有這樣的二維陣列結構的資料:
[[1, 3, 4, 6],
[1, 4, 8, 2],
[1, 3, 2, 9],
[2, 2, 4, 8],
[2, 4, 9, 1],
[2, 2, 9, 3]]
第一串列示第三維,因此我想將其轉換為以下 3D 陣列:
[[[3, 4, 6],
[4, 8, 2],
[3, 2, 9]],
[[2, 4, 8],
[4, 9, 1],
[2, 9, 3]]]
是否有內置的 numpy 函式來執行此操作?
uj5u.com熱心網友回復:
您可以嘗試以下代碼:
import numpy as np
array = np.array([[1, 3, 4, 6],
[1, 4, 8, 2],
[1, 3, 2, 9],
[2, 2, 4, 8],
[2, 4, 9, 1],
[2, 2, 9, 3]])
array = np.delete(array, 0, 1)
array.reshape(2,3,-1)
輸出
array([[[3, 4, 6],
[4, 8, 2],
[3, 2, 9]],
[[2, 4, 8],
[4, 9, 1],
[2, 9, 3]]])
但是,當您知道陣列的形狀時,可以使用此代碼。但是,如果您確定陣列中的列數是 3 的倍數,您可以簡單地使用下面的代碼以所需的格式顯示陣列。
array.reshape(array.shape[0]//3,3,-3)
uj5u.com熱心網友回復:
使用帶有 reshape 函式的 numpy 陣列切片。
import numpy as np
arr = [[1, 3, 4, 6],
[1, 4, 8, 2],
[1, 3, 2, 9],
[2, 2, 4, 8],
[2, 4, 9, 1],
[2, 2, 9, 3]]
# convert the list to numpy array
arr = np.array(arr)
# remove first column from numpy array
arr = arr[:,1:]
# reshape the remaining array to desired shape
arr = arr.reshape(len(arr)//3,3,-1)
print(arr)
輸出:
[[[3 4 6]
[4 8 2]
[3 2 9]]
[[2 4 8]
[4 9 1]
[2 9 3]]]
uj5u.com熱心網友回復:
您列出了一個非numpy陣列。我不確定您是否只是建議numpy作為獲得非numpy結果的一種手段,或者您實際上是在尋找一個numpy陣列作為結果。如果您實際上不需要numpy,您可以執行以下操作:
arr = [[1, 3, 4, 6],
[1, 4, 8, 2],
[1, 3, 2, 9],
[2, 2, 4, 8],
[2, 4, 9, 1],
[2, 2, 9, 3]]
# Length of the 3rd and 2nd dimension.
nz = arr[-1][0] (arr[0][0]==0)
ny = int(len(arr)/nz)
res = [[arr[ny*z_idx y_idx][1:] for y_idx in range(ny)] for z_idx in range(nz)]
輸出:
[[[3, 4, 6], [4, 8, 2], [3, 2, 9]], [[2, 4, 8], [4, 9, 1], [2, 9, 3]]]
請注意,計算nz考慮到陣列中的第 3 維索引是基于 0(因為默認情況下是 python)或基于 1(如您在示例中所示)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/430708.html
上一篇:使用numpy廣播減去二維陣列
