[英]Stack several 2D arrays to produce a 3D array
我有 4 個 numpy 數組,每個數組的形狀為 (5,5)。 我想將它們堆疊起來,以便獲得一個新的形狀數組 (5,5,4)。 我嘗試使用:
N = np.stack((a, b, c, d))
但是,由於我是使用 numpy 的新手,我無法理解為什么它會給出 (4, 5, 5) 而不是 (5, 5, 4) 的形狀。 我應該使用另一種方法嗎? dstack 工作但改變了我的數組,我認為它轉置了它們。
例如,4個數組
[[1,2]
[3,4]]
[[1,2]
[3,4]]
[[1,2]
[3,4]]
[[1,2]
[3,4]]
堆疊時我期待:
[[[1,2]
[3,4]]
[[1,2]
[3,4]]
[[1,2]
[3,4]]
[[1,2]
[3,4]]]
這在堆棧中按預期工作,但會給出(4,2,2)而不是(2,2,4)的形狀。 根據我的理解,形狀是(行、列、深度)我錯了嗎?
我相信您可以連接數組,並將其重塑為 3D 數組:
l = [a,b,c,d]
np.concatenate(l).reshape(len(l), *a.shape)
或者,如果您想避免創建該列表並事先知道數組的數量:
np.concatenate((a,b,c,d)).reshape(4, *a.shape)
檢查共享示例:
a = [[1, 2], [3, 4]]
d = c = b = a
np.concatenate((a,b,c,d)).reshape(4, *np.array(a).shape)
array([[[1, 2],
[3, 4]],
[[1, 2],
[3, 4]],
[[1, 2],
[3, 4]],
[[1, 2],
[3, 4]]])
In [10]: arr = np.arange(1,5).reshape(2,2)
In [11]: np.stack((arr,arr,arr))
Out[11]:
array([[[1, 2],
[3, 4]],
[[1, 2],
[3, 4]],
[[1, 2],
[3, 4]]])
In [12]: _.shape
Out[12]: (3, 2, 2)
默認stack
在新的第一個軸上連接數組,與np.array((arr,arr,arr)).shape
如果給定一個axis
參數,它可以將它們連接為:
In [13]: np.stack((arr,arr,arr), axis=2)
Out[13]:
array([[[1, 1, 1],
[2, 2, 2]],
[[3, 3, 3],
[4, 4, 4]]])
In [14]: _.shape
Out[14]: (2, 2, 3)
np.dstack
做同樣的事情,其中d
代表“深度”。
最后一個維度(此處為 3)顯示為最里面的列。
選擇一個“通道”會產生一個二維數組:
In [17]: np.stack((arr,arr,arr), axis=2)[:,:,0]
Out[17]:
array([[1, 2],
[3, 4]])
對於 3 個維度,第一個維度是塊或平面,中間的行。 這些名稱是方便的,幫助我們形象化動作,但在numpy
沒有固有的意義。 對於圖像,最后一個維度通常稱為顏色或通道,大小為 3 或 4。圖像的 4d 數組可以描述為
(batches, height, width, color)
但實際含義取決於您如何處理數組。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.