NumPy:配列を結合する(concatenate, vstack, hstack)

複数の配列を1つにまとめたいとき、concatenatevstackhstack を使います。それぞれ結合の方向が異なりますので、用途に合わせて使い分けましょう。

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]]

使い分けの目安

関数結合方向主な用途
concatenateaxis で指定汎用的、細かい制御が必要なとき
vstack縦(行を増やす)データを行方向に追加したいとき
hstack横(列を増やす)データを列方向に追加したいとき

vstackhstack は名前から結合方向がわかりやすいので、単純な結合ならこちらを使うとコードが読みやすくなります。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]