np.concatenateとは?NumPyで配列を連結する方法を初心者向けに解説

PythonでNumPyを使っていると、「複数の配列を1つにつなげたい」という場面があります。

そのようなときに便利なのが、np.concatenate()です。

np.concatenate()を使うと、NumPyの配列を指定した軸(axis)に沿って連結できます。

この記事では、np.concatenate()の基本的な使い方から、axisの指定、2次元配列の連結、np.vstack()やnp.hstack()との違いまで、初心者向けにわかりやすく解説します。


np.concatenateとは

np.concatenate()は、NumPy配列を連結するための関数です。

基本的な書き方は次のとおりです。

import numpy as np

np.concatenate((配列1, 配列2))

例えば、次のように使います。

import numpy as np

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]

aとbという2つの配列が、1つの配列に連結されました。


np.concatenateの基本構文

np.concatenate()の基本的な構文は次のとおりです。

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

主な引数は次のとおりです。

引数 内容
a1, a2, ... 連結する配列
axis どの方向に連結するか

axisを省略した場合は、基本的にaxis=0で連結されます。


1次元配列を連結する

最も基本的なのが、1次元配列の連結です。

import numpy as np

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])

result = np.concatenate((a, b))

print(result)

実行結果:

[1 2 3 4 5 6]

3つ以上の配列も連結できます。

import numpy as np

a = np.array([1, 2])
b = np.array([3, 4])
c = np.array([5, 6])

result = np.concatenate((a, b, c))

print(result)

実行結果:

[1 2 3 4 5 6]

2次元配列をnp.concatenateで連結する

np.concatenate()は、2次元以上の配列でも使用できます。

例えば、次の2つの配列を用意します。

import numpy as np

a = np.array([
    [1, 2],
    [3, 4]
])

b = np.array([
    [5, 6],
    [7, 8]
])

axis=0で連結

result = np.concatenate((a, b), axis=0)

print(result)

実行結果:

[[1 2]
 [3 4]
 [5 6]
 [7 8]]

axis=0では、行方向に連結されます。

つまり、

a
1 2
3 4

↓

b
5 6
7 8

が、

1 2
3 4
5 6
7 8

になります。


axis=1で連結する

axis=1を指定すると、列方向に連結できます。

import numpy as np

a = np.array([
    [1, 2],
    [3, 4]
])

b = np.array([
    [5, 6],
    [7, 8]
])

result = np.concatenate((a, b), axis=1)

print(result)

実行結果:

[[1 2 5 6]
 [3 4 7 8]]

つまり、

1 2 | 5 6
3 4 | 7 8

という形で横方向につながります。


np.concatenateのaxisとは

np.concatenate()を理解するうえで重要なのがaxisです。

2次元配列では、一般的に次のように考えるとわかりやすいでしょう。

axis=0 → 縦方向
axis=1 → 横方向

例えば、

a = np.array([
    [1, 2],
    [3, 4]
])

の場合、

      axis=1 →
    1   2
    3   4
    ↓
  axis=0

というイメージです。


np.concatenateで3つ以上の配列を連結する

np.concatenate()では、複数の配列をまとめて連結できます。

import numpy as np

a = np.array([1, 2])
b = np.array([3, 4])
c = np.array([5, 6])

result = np.concatenate((a, b, c))

print(result)

実行結果:

[1 2 3 4 5 6]

配列を順番に連結したい場合に便利です。


np.concatenateとリストの違い

Pythonのリストでも+演算子を使って要素を連結できます。

a = [1, 2, 3]
b = [4, 5, 6]

result = a + b

print(result)

実行結果:

[1, 2, 3, 4, 5, 6]

一見するとnp.concatenate()と同じように見えます。

しかし、NumPy配列では配列の形状やaxisを指定して連結できる点が大きな違いです。

import numpy as np

a = np.array([
    [1, 2],
    [3, 4]
])

b = np.array([
    [5, 6],
    [7, 8]
])

result = np.concatenate((a, b), axis=1)

print(result)

このように、NumPyでは2次元以上のデータを方向を指定して連結できます。


np.concatenateでエラーになるケース

np.concatenate()では、配列の形状が合わないとエラーになることがあります。

例えば、

import numpy as np

a = np.array([
    [1, 2],
    [3, 4]
])

b = np.array([
    [5, 6, 7],
    [8, 9, 10]
])

result = np.concatenate((a, b), axis=0)

この場合、aは2列、bは3列なので、axis=0方向に連結することができません。

axis=0で連結する場合、連結する軸以外の次元のサイズを合わせる必要があります。

一方、axis=1なら、

result = np.concatenate((a, b), axis=1)

print(result)

とできます。

結果:

[[ 1  2  5  6  7]
 [ 3  4  8  9 10]]

np.concatenateとnp.vstackの違い

NumPyにはnp.vstack()という関数もあります。

np.vstack((a, b))

これは、配列を縦方向に積み重ねるときに便利です。

例えば、

import numpy as np

a = np.array([1, 2])
b = np.array([3, 4])

result = np.vstack((a, b))

print(result)

実行結果:

[[1 2]
 [3 4]]

一方、np.concatenate()では、

np.concatenate((a, b))

のように連結します。

np.concatenate()はaxisを指定することで、より一般的な配列連結に対応できます。


np.concatenateとnp.hstackの違い

np.hstack()は、配列を横方向に連結するときによく使われます。

import numpy as np

a = np.array([
    [1, 2],
    [3, 4]
])

b = np.array([
    [5, 6],
    [7, 8]
])

result = np.hstack((a, b))

print(result)

実行結果:

[[1 2 5 6]
 [3 4 7 8]]

これは、

np.concatenate((a, b), axis=1)

と同じような処理です。


np.concatenateとnp.stackの違い

np.concatenate()と似た関数にnp.stack()があります。

この2つは混同しやすいため注意が必要です。

np.concatenate()は、既存の軸に沿って配列を連結します。

一方、np.stack()は、新しい軸を追加して配列を結合します。

例えば、

import numpy as np

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])

print(np.concatenate((a, b)))

結果:

[1 2 3 4 5 6]

一方、

print(np.stack((a, b)))

結果:

[[1 2 3]
 [4 5 6]]

この違いはNumPyを使いこなすうえで重要です。


np.concatenateの戻り値

np.concatenate()の戻り値は、連結されたNumPyのndarrayです。

例えば、

import numpy as np

a = np.array([1, 2])
b = np.array([3, 4])

result = np.concatenate((a, b))

print(type(result))

実行結果:

<class 'numpy.ndarray'>

np.concatenateで覚えておきたいポイント

np.concatenate()を使うときは、次のポイントを押さえておきましょう。

1. 複数の配列を連結できる

np.concatenate((a, b, c))

のように複数の配列を指定できます。

2. axisで方向を指定できる

np.concatenate((a, b), axis=0)

や、

np.concatenate((a, b), axis=1)

のように指定します。

3. 配列の形状に注意する

特に2次元以上の配列では、連結する方向以外の次元が一致している必要があります。

4. np.stackとは役割が違う

既存の軸に沿って連結するのがnp.concatenate()、新しい軸を追加して結合するのがnp.stack()です。


まとめ

np.concatenate()は、NumPyの配列を連結するための関数です。

基本的な使い方は、

import numpy as np

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])

result = np.concatenate((a, b))

print(result)

です。

実行結果:

[1 2 3 4 5 6]

2次元配列ではaxisが重要です。

np.concatenate((a, b), axis=0)

なら縦方向、

np.concatenate((a, b), axis=1)

なら横方向に連結できます。

NumPyでデータ分析や機械学習を行う場合、複数の配列やデータを結合する場面は非常に多いため、np.concatenate()はぜひ覚えておきたい関数です。

np.concatenateのポイント

  • NumPy配列を連結する

  • 複数の配列をまとめて連結できる

  • axis=0で縦方向に連結できる

  • axis=1で横方向に連結できる

  • 配列の形状が合わないとエラーになる

  • np.vstack()やnp.hstack()と使い分ける

  • np.stack()とは「軸を追加するかどうか」が大きな違い

「NumPyの配列をつなげたい」と思ったら、まずnp.concatenate()を検討するとよいでしょう。


NumPy|結合・分割の関連記事

複数の配列をつなぐ・分けるための関数の記事です。

NumPy全体の使い方は「NumPyの使い方」、「NumPy関数一覧」でまとめています。

プログラミング学習に興味がある方は、まずは無料体験会へ

無料体験会・お申し込みはこちら