NumPy

【NumPy】配列(ndarray)の結合方法 ~ concatenate, vstack, hstack ~

【numpy】配列(ndarray)の結合方法 _ concatenate, vstack, hstack _

NumPyの配列(ndarray)の結合方法について解説します。

配列(ndarray)の結合方法

NumPyの配列(ndarray)を結合する場合にはconcatenate関数、vstack関数、hstack関数を使用します。

行方向(垂直方向)の結合

配列を行方向(垂直方向)に結合する場合には、concatenate関数またはvstack関数を使用します。

concatenateを使用する場合

concatenate関数を使用する場合には、以下の例のように使用します。結合したい配列をタプルまたはリストの形式で順に列挙するだけで簡単に結合をすることができます。

import numpy as np

x = np.arange(9).reshape((3, 3))
y = np.arange(9).reshape((3, 3))

# 2次元配列を行方向に結合する
result = np.concatenate((x, y))
print(result)
【実行結果】
[[0 1 2]
 [3 4 5]
 [6 7 8]
 [0 1 2]
 [3 4 5]
 [6 7 8]]

vstackを使用する場合

行方向に結合したい場合には、vstack関数を使うこともできます。vは垂直(vertical)表しています。

使い方はconcatenate関数と同様です。

import numpy as np

x = np.arange(9).reshape((3, 3))
y = np.arange(9).reshape((3, 3))

# 2次元配列を行方向に結合する
result = np.vstack((x, y))
print(result)
【実行結果】
[[0 1 2]
 [3 4 5]
 [6 7 8]
 [0 1 2]
 [3 4 5]
 [6 7 8]]

列方向(水平方向)の結合

配列を列方向(水平方向)に結合する場合には、concatenate関数またはhstack関数を使用します。

concatenateを使用する場合

concatenate関数を使用する場合には、以下の例のように使用します。結合したい配列を タプルまたはリストの形式で順に列挙するだけで簡単に結合をすることができます。

行方向の結合との違いは「axis=1」を指定して列方向の軸を指定している点です。行方向の場合は特に指定しませんでしたが、デフォルトでaxis=0が設定されています。

import numpy as np

x = np.arange(9).reshape((3, 3))
y = np.arange(9).reshape((3, 3))

# 2次元配列を列方向に結合する
result = np.concatenate((x, y), axis=1)
print(result)
【実行結果】
[[0 1 2 0 1 2]
 [3 4 5 3 4 5]
 [6 7 8 6 7 8]]

hstackを使用する場合

列方向に結合したい場合には、hstack関数を使うこともできます。hは水平(horizontal)を表しています。

使い方はconcatenate関数と同様ですが、hstack自体が列方向(水平方向)結合の関数であるためconcatenateのようなaxisの指定は必要ありません。

import numpy as np

x = np.arange(9).reshape((3, 3))
y = np.arange(9).reshape((3, 3))

# 2次元配列を列方向に結合する
result = np.hstack((x, y))
print(result)
【実行結果】
[[0 1 2 0 1 2]
 [3 4 5 3 4 5]
 [6 7 8 6 7 8]]

Note
  • concatenate関数のドキュメントの記載はこちらを参照してください。
  • vstack関数のドキュメントの記載はこちらを参照してください。
  • hstack関数のドキュメントの記載はこちらを参照してください。
Note

上記の例では、2つの配列で例を示していますが、2つしか結合できないというわけではありません。複数の配列の結合の場合は、順に列挙すれば結合することが可能です。