1. ホーム
  2. スクリプト・コラム
  3. パイソン

[解決済み】numpyの配列連結。"ValueError:すべての入力配列は同じ次元数でなければならない"

2022-01-10 13:56:36

質問事項

2つのnumpy配列を連結したいのですが、2つのnumpy配列は次のとおりです。

[[  6487    400 489580      0]
 [  6488    401 492994      0]
 [  6491    408 489247      0]
 [  6491    408 489247      0]
 [  6492    402 499013      0]]
[  16.   15.   12.  12.  17. ]

その結果 :

[[  6487    400    489580    0   16]
 [  6488    401    492994    0   15]
 [  6491    408    489247    0   12]
 [  6491    408    489247    0   12]
 [  6492    402    499013    0   17]]

試してみた np.concatenate([array1, array2]) しかし、エラーが発生します。

ValueError: all the input arrays must have same number of dimensions

解決方法は?

使用方法 np.concatenate に拡張する必要があります。 2D に沿って連結し、さらに axis=1 -

np.concatenate((a,b[:,None]),axis=1)

別の方法として np.column_stack を使用することで、それを解決することができます。

np.column_stack((a,b))

サンプル実行

In [84]: a
Out[84]: 
array([[54, 30, 55, 12],
       [64, 94, 50, 72],
       [67, 31, 56, 43],
       [26, 58, 35, 14],
       [97, 76, 84, 52]])

In [85]: b
Out[85]: array([56, 70, 43, 19, 16])

In [86]: np.concatenate((a,b[:,None]),axis=1)
Out[86]: 
array([[54, 30, 55, 12, 56],
       [64, 94, 50, 72, 70],
       [67, 31, 56, 43, 43],
       [26, 58, 35, 14, 19],
       [97, 76, 84, 52, 16]])

もし b はそのような 1D の配列 dtype=object の形状を持つ (1,) の場合、おそらくすべてのデータはその中の唯一の要素に含まれているため、私たちは フラット化 を連結する前に取り出すことができます。そのためには np.concatenate をつけることもできます。以下は、ポイントを明確にするためのサンプル実行です -。

In [118]: a
Out[118]: 
array([[54, 30, 55, 12],
       [64, 94, 50, 72],
       [67, 31, 56, 43],
       [26, 58, 35, 14],
       [97, 76, 84, 52]])

In [119]: b
Out[119]: array([array([30, 41, 76, 13, 69])], dtype=object)

In [120]: b.shape
Out[120]: (1,)

In [121]: np.concatenate((a,np.concatenate(b)[:,None]),axis=1)
Out[121]: 
array([[54, 30, 55, 12, 30],
       [64, 94, 50, 72, 41],
       [67, 31, 56, 43, 76],
       [26, 58, 35, 14, 13],
       [97, 76, 84, 52, 69]])