簡體   English   中英

使用numpy從許多2D數組構建3D數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM