web-dev-qa-db-ja.com

リストの要素であるnumpy配列を連結します

L = [a、b、c]のようなnumpy配列を含むリストがあります。a、b、cは、N_aがT、N_bがT、N_cがサイズのnumpy配列です。
a、b、cを行ごとに連結し、形状(N_a + N_b + N_c、T)のnumpy配列を取得します。明らかに1つのソリューションがforループを実行してnumpy.concatenateを使用していますが、これを行うPython的な方法はありますか?

ありがとう

20
TNM

使用する - numpy.vstack

L = (a,b,c)
arr = np.vstack(L)
35
shx2

help('concatenate'には次の署名があります。

concatenate(...)
    concatenate((a1, a2, ...), axis=0)

    Join a sequence of arrays together.

(a1, a2, ...)はリストのように見えますよね?そして、デフォルトの軸は、結合したい軸です。試してみましょう:

In [149]: L = [np.ones((3,2)), np.zeros((2,2)), np.ones((4,2))]

In [150]: np.concatenate(L)
Out[150]: 
array([[ 1.,  1.],
       [ 1.,  1.],
       [ 1.,  1.],
       [ 0.,  0.],
       [ 0.,  0.],
       [ 1.,  1.],
       [ 1.,  1.],
       [ 1.,  1.],
       [ 1.,  1.]])

vstackもこれを行いますが、そのコードを見てください:

def vstack(tup):
    return np.concatenate([atleast_2d(_m) for _m in tup], 0)

余分なことは、コンポーネント配列に2次元があることを確認することです。

7
hpaulj