複数の配列を1つにまとめたいとき、concatenate、vstack、hstack を使います。それぞれ結合の方向が異なりますので、用途に合わせて使い分けましょう。
concatenate:軸を指定して結合
np.concatenate() は、指定した軸方向に配列を結合します。axis 引数で結合方向を指定します。
import numpy as np a = np.array([[1, 2], [3, 4]]) b = np.array([[5, 6], [7, 8]]) # 縦方向に結合(axis=0、デフォルト) c = np.concatenate([a, b], axis=0) print(c) # [[1 2] # [3 4] # [5 6] # [7 8]] # 横方向に結合(axis=1) d = np.concatenate([a, b], axis=1) print(d) # [[1 2 5 6] # [3 4 7 8]]
1次元配列の場合は、単純に配列が連結されます。
a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) c = np.concatenate([a, b]) print(c) # [1 2 3 4 5 6]
vstack:縦方向に積み上げる
np.vstack() は、配列を縦方向(vertical)に積み上げます。concatenate(axis=0) と同じ動作ですが、より直感的な名前です。
a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) c = np.vstack([a, b]) print(c) # [[1 2 3] # [4 5 6]]
1次元配列を vstack すると、各配列が1行になった2次元配列が作られます。
hstack:横方向に並べる
np.hstack() は、配列を横方向(horizontal)に並べます。concatenate(axis=1) と似ていますが、1次元配列でも使えます。
a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) c = np.hstack([a, b]) print(c) # [1 2 3 4 5 6]
2次元配列では、列方向に結合されます。
a = np.array([[1], [2]]) b = np.array([[3], [4]]) c = np.hstack([a, b]) print(c) # [[1 3] # [2 4]]
使い分けの目安
| 関数 | 結合方向 | 主な用途 |
|---|---|---|
| concatenate | axis で指定 | 汎用的、細かい制御が必要なとき |
| vstack | 縦(行を増やす) | データを行方向に追加したいとき |
| hstack | 横(列を増やす) | データを列方向に追加したいとき |
vstack と hstack は名前から結合方向がわかりやすいので、単純な結合ならこちらを使うとコードが読みやすくなります。3次元以上の配列を扱う場合や、軸を細かく指定したい場合は concatenate を使いましょう。
なお、3つ以上の配列も一度に結合できます。
a = np.array([1, 2]) b = np.array([3, 4]) c = np.array([5, 6]) d = np.hstack([a, b, c]) print(d) # [1 2 3 4 5 6]