3 回答

TA貢獻1795條經驗 獲得超7個贊
整形時要小心。即使它有效,元素的排列也可能不是你想要的。
從一個我們可以形象化的簡單數組開始:
In [805]: x = np.arange(24).reshape(3,2,4)
In [806]: x
Out[806]:
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7]],
[[ 8, 9, 10, 11],
[12, 13, 14, 15]],
[[16, 17, 18, 19],
[20, 21, 22, 23]]])
重塑為 (-1,2,1) - 但讓我們刪除最后 1 以獲得更緊湊的顯示:
In [807]: x.reshape(-1,2)
Out[807]:
array([[ 0, 1],
[ 2, 3],
[ 4, 5],
[ 6, 7],
[ 8, 9],
[10, 11],
[12, 13],
[14, 15],
[16, 17],
[18, 19],
[20, 21],
[22, 23]])
注意原始 [0,1,2,3] 行是如何分成 2 行的。
另一種重新分配大小為 4 的最后一個維度的方法是:
In [808]: np.vstack([x[...,i] for i in range(4)])
Out[808]:
array([[ 0, 4],
[ 8, 12],
[16, 20],
[ 1, 5],
[ 9, 13],
[17, 21],
[ 2, 6],
[10, 14],
[18, 22],
[ 3, 7],
[11, 15],
[19, 23]])
如果我們使用np.stack并得到 (4,3,2) 形狀,那可能會更清楚
array([[[ 0, 4],
[ 8, 12],
[16, 20]],
....
x.transpose(2,0,1) 產生同樣的東西。
reshape保留元素的散亂/扁平順序。轉置改變它。
In [812]: x.transpose(2,0,1).ravel()
Out[812]:
array([ 0, 4, 8, 12, 16, 20, 1, 5, 9, 13, 17, 21, 2, 6, 10, 14,...])
In [813]: x.reshape(-2,2).ravel()
Out[813]:
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, ...])

TA貢獻1770條經驗 獲得超3個贊
您擁有的代碼沒有做您認為的那樣。i[0]
獲取第一個軸上的第 0 個元素,即您的80
,這不是您想要的。
無論如何,您真正想要的是選擇最快方向的第一個切片,所以只需執行以下操作:
X = train[:,:,:,0:1]
如果您的數據實際上不是您所說的大小,請嘗試:
X = np.array([i.reshape(80, 60, 4)[:,:,0:1] for i in train])
添加回答
舉報