2017-10-15 6 views
1

私は形の数字が(1429,1)であり、各行自体は形状がnumpyの配列(3,100です。ここでlは行ごとに異なる場合があります。 結果のnumpy配列の形状が(1429, 300)になるように各行をフラット化することで、この配列の形状を変更できますか?多次元ナンプィ配列の形状変更

+0

との私達にあなたの最小限かつ検証例を表示 – Chiel

答えて

2

私はあなたの最初の配列の形状は、それが本当ならば、あなたはそれが以下のような形状です変更することができ、(1429、3、100)であると思います:

import numpy as np 
a = a.flatten().reshape((1429, 300)) #a is the initial numpy array 
2

あなたの埋め込み構造の種類は、おそらくobject.それはちょうどですさ1429 numpy.ndarraysの参考文献の集まり。

exempleとして:

a=np.empty((1429,1),object) 
for x in a : 
    x[0]=np.random.rand(3,100) 


In [19]: a.shape,a.dtype 
Out[19]: ((1429, 1), dtype('O')) 

In [20]: a[0,0].shape 
Out[20]: (3, 100) 

構造はおそらく連続していません。すべてのデータを含むブロックを得るために、あなたは良いレイアウトを得るために、それを再構築する必要があります。

b=np.array([x.ravel() for x in a.ravel()]) 

In [21]: b.shape 
Out[21]: (1429, 300) 

ravel廃棄不要な次元を。

0

形状(1429,1)を持つオブジェクトdtype配列であり、すべての要素が形状(3,100)の2次元であると仮定すると、「平坦化」する良い方法はconcatenateまたはstackを使用することです。私はarr.ravel()を使用

np.stack(arr.ravel()).reshape(-1,300) 

ので、配列はstackに(1429)要素のリストのように見えます。 stackは要素を連結し、(1429,3,100)配列を作成します。再構成すると、それが(1429、300)に変換されます。デフォルトaxis=0

In [939]: arr = np.empty((5,1),object) 
In [940]: arr[:,0] = [np.arange(6).reshape(2,3) for _ in range(5)] 
In [941]: arr 
Out[941]: 
array([[array([[0, 1, 2], 
     [3, 4, 5]])], 
     [array([[0, 1, 2], 
     [3, 4, 5]])], 
     [array([[0, 1, 2], 
     [3, 4, 5]])], 
     [array([[0, 1, 2], 
     [3, 4, 5]])], 
     [array([[0, 1, 2], 
     [3, 4, 5]])]], dtype=object) 
In [942]: np.stack(arr.ravel()) 
Out[942]: 
array([[[0, 1, 2], 
     [3, 4, 5]], 

     [[0, 1, 2], 
     [3, 4, 5]], 

     [[0, 1, 2], 
     [3, 4, 5]], 

     [[0, 1, 2], 
     [3, 4, 5]], 

     [[0, 1, 2], 
     [3, 4, 5]]]) 
In [943]: np.stack(arr.ravel()).reshape(-1,6) 
Out[943]: 
array([[0, 1, 2, 3, 4, 5], 
     [0, 1, 2, 3, 4, 5], 
     [0, 1, 2, 3, 4, 5], 
     [0, 1, 2, 3, 4, 5], 
     [0, 1, 2, 3, 4, 5]]) 

np.stacknp.array(...)と同じです。

それともconcatenate

In [950]: np.concatenate(arr.ravel(),axis=0) 
Out[950]: 
array([[0, 1, 2], 
     [3, 4, 5], 
     [0, 1, 2], 
     [3, 4, 5], 
     [0, 1, 2], 
     [3, 4, 5], 
     [0, 1, 2], 
     [3, 4, 5], 
     [0, 1, 2], 
     [3, 4, 5]]) 
In [951]: np.concatenate(arr.ravel(),axis=0).reshape(5,6) 
Out[951]: 
array([[0, 1, 2, 3, 4, 5], 
     [0, 1, 2, 3, 4, 5], 
     [0, 1, 2, 3, 4, 5], 
     [0, 1, 2, 3, 4, 5], 
     [0, 1, 2, 3, 4, 5]])