2017-01-16 33 views
1

比方說,我有3D NumPy的ndarray與形狀(n, 0, 2),我想連續填補它連同形狀(1,2)的條目的第一維,使用一些功能像vstack「vstack」荷蘭國際集團在3D numpy的ndarray

換句話說,我想從(n, 0, 2)ndarray轉換爲(n, m, 2)之一。但是,由於我不知道m,我需要一些動態更新我的數組。

可能嗎?

+0

請您詳細說明一下。大小爲'(n,0,2)'的第一個數組有零個元素,並且將繼續存在,直到所有維數都大於零。我看不出如何通過添加/填充形狀元素'(1,2)'來實現這一點。 –

+0

@HannesOvrén我更新了問題,希望現在更清楚。 – AreTor

+1

我仍然不知道你應該如何從'(n,0,2)'到'(n,1,2)'以'(1,2)'數組作爲新數據。前者有'2n'個元素,但後者只有'2'個元素。 –

回答

2

要建立一個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加入在現有的軸線。

In [27]: np.concatenate(alist, axis=0).shape 
Out[27]: (6, 4) 

從具有0維度的數組開始是很差的練習。您不要fill it in。最好你將它與其他3d陣列連接起來。這是一個緩慢且容易出錯的模仿,附加到[]列表。

相關問題