簡體   English   中英

“ vstack”一個3d Numpy ndarray

[英]“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)

concatenatevstack在現有軸上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.

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