[英]“vstack”ing a 3d Numpy ndarray
假設我有一個形狀為(n, 0, 2)
的3d NumPy ndarray
,並且我想使用vstack
函數連續地沿第一個維度填充形狀為(1,2)
vstack
。
換句話說,我想從(n, 0, 2)
ndarray
到(n, m, 2)
一個。 但是,由於我事先不知道m
,所以我需要動態更新數組。
可能嗎?
要“動態”構建3d數組,最好將子數組收集到列表中,最后執行一次“堆疊”
In [21]: alist = []
In [22]: for i in range(3):
alist.append(np.arange(i,i+8).reshape(2,4))
....:
In [23]: alist
Out[23]:
[array([[0, 1, 2, 3],
[4, 5, 6, 7]]), array([[1, 2, 3, 4],
[5, 6, 7, 8]]), array([[2, 3, 4, 5],
[6, 7, 8, 9]])]
一旦收集,它們可以以任何兼容的方式加入。 np.array
在開始時將它們連接到新軸上。
In [24]: np.array(alist)
Out[24]:
array([[[0, 1, 2, 3],
[4, 5, 6, 7]],
[[1, 2, 3, 4],
[5, 6, 7, 8]],
[[2, 3, 4, 5],
[6, 7, 8, 9]]])
In [25]: _.shape
Out[25]: (3, 2, 4)
np.stack
可以執行相同的操作,也可以在其他位置創建新軸。
In [26]: np.stack(alist,axis=1).shape
Out[26]: (2, 3, 4)
concatenate
和vstack
在現有軸上vstack
。
In [27]: np.concatenate(alist, axis=0).shape
Out[27]: (6, 4)
從維數為0的數組開始是不好的做法。 您不fill it in
。 充其量您可以將其與其他3d陣列連接在一起。 追加到[]
列表是一個緩慢且容易出錯的模仿。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.