2017-05-21 3 views
1

私はPythonで作業しています。私はarrの長さLのnumpyの配列を持っています。arr = np.empty(L, dtype = object) arrのすべてのエントリに別のnumpy配列が含まれていますが、それぞれが異なる長さののです(そのため、dtype = objectを使用したのはそのためです)。今私はarrに含まれるすべてのエントリを最も効率的に取り込み、1つの大きな1D numpy配列に入れたいと思っています。つまり、私はarray([arr[0,0], arr[0,1], arr[0,2], ... , arr[1,0], arr[0,1], ...])という数字の配列をこの特定の順序で使用したいと思っています。 Pyhtonでこれを書く方法についての助け。異なる列長のnumpy行列のエントリを1Dの配列に入れます。

答えて

1

ネストされたリストを平坦化したいと思うように聞こえます。つまり、配列の配列は実質的にリストのリストです。そのため、標準のPythonイディオム、itertools.chainがあります:

配列のサンプル配列を作成します。

In [828]: arr = np.array([np.arange(i) for i in range(1, 5)]) 
In [829]: arr 
Out[829]: array([array([0]), array([0, 1]), array([0, 1, 2]), array([0, 1, 2, 3])], dtype=object) 

インポートおよび使用チェーンが。

In [830]: from itertools import chain 
In [831]: list(chain(*arr)) 
Out[831]: [0, 0, 1, 0, 1, 2, 0, 1, 2, 3] 
In [832]: np.array(_) 
Out[832]: array([0, 0, 1, 0, 1, 2, 0, 1, 2, 3]) 

しかし、配列記述のリストはまた、我々はnp.concatenate(またはnp.hstack)を使用することができます示唆している:それはリストであるかのよう*arrarrを拡大

In [837]: np.concatenate(arr) 
Out[837]: array([0, 0, 1, 0, 1, 2, 0, 1, 2, 3]) 

concatenateすなわち「リスト」をとり、例えばエンド・エンド(唯一の軸上)にジョインします。

In [841]: list(arr) 
Out[841]: [array([0]), array([0, 1]), array([0, 1, 2]), array([0, 1, 2, 3])] 
0

flatten()メソッドを試しましたか?私はそれがここで働くかもしれないと思う。

>>> arr = np.identity(5) 
>>> arr.shape 
(5, 5) 
>>> arr = arr.flatten() 
>>> arr.shape 
(25,) 
関連する問題