NumPy:配列を結合する(concatenate, vstack, hstack)
複数の配列を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]