[英]Building a 3D array from a number of 2D arrays with numpy
讓我們從2個2D數組開始:
import numpy as np
a = np.zeros( (3,4) )
b = np.zeros( (3,4) )
現在讓我們將它們組合成一個3D數組:
c = np.stack( (a,b) )
到目前為止一切都很好,但是如何向3D陣列添加額外的2D陣列,以下是行不通的:
np.stack( (c,a) )
那么,我的問題是如何在3D陣列中添加額外的圖層? (numpy版本1.12.1
)
如果您在開始時就知道所有的2D數組,那么您可以疊加兩個以上的數組:
import numpy as np
a = np.zeros((3, 4))
b = np.zeros((3, 4))
c = np.stack((a, b, a))
如果你已經有一個“堆疊”數組並想要添加另一個數組,你可以使用例如numpy.concatenate
:
如果要添加的數組是“平面”,則必須將其包裝在列表中以使尺寸匹配。 默認情況下,數組沿第一個維度連接(就像在關鍵字參數中指定axis=0
):
>>> c.shape
(2, 3, 4)
>>> np.array([a]).shape
(1, 3, 4)
c = np.concatenate((c, [a]))
如果兩個陣列已經“堆疊”,這也將起作用:
c = np.concatenate((c, c))
您可以在要追加的數組的開頭添加一個帶有None/np.newaxis
的新軸: a[None,:,:]
或簡單地a[None,...]
或只是a[None]
並用於堆疊使用np.vstack
。
這是一個讓事情變得清晰的示例 -
In [14]: c.shape
Out[14]: (2, 3, 4)
In [15]: d = np.vstack((c,a[None]))
In [16]: d.shape
Out[16]: (3, 3, 4)
In [17]: e = np.vstack((d,a[None]))
In [18]: e.shape
Out[18]: (4, 3, 4)
工作流程
因此,工作流程將是:
1)從2D
陣列開始,為陣列使用新軸:
c = np.vstack( (a[None],b[None]) )
2)對於后續的附加步驟,使用新軸作為傳入的2D
陣列,並使用np.vstack
與現有的3D
陣列堆疊 -
d = np.vstack((c,a[None]))
使用np.concatenate
獲得性能:
當我們需要沿着第一個軸堆疊時, np.vstack
下的np.vstack
使用np.concatenate
作為特例。 因此,如果我們想利用np.concatenate
可能出於性能原因避免額外的函數調用開銷,我們需要指定連接軸,這將是第一個軸。
因此,使用np.concatenate
-
In [23]: d = np.concatenate((c, a[None]), axis=0)
In [24]: d.shape
Out[24]: (3, 3, 4)
In [25]: e = np.concatenate((d, a[None]), axis=0)
In [26]: e.shape
Out[26]: (4, 3, 4)
首先做一個相同的尺寸為c
result= np.append(c, [a], axis=0)
但是,與列表不同,改變numpy數組的大小是無效的
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.