【Numpy入門 np.concatenate】配列同士の結合操作をマスターしよう!

この記事では、複数の配列を結合して新しい配列を生成する、np.concatenateについて紹介します。np.concatenate関数を関数名が長くてちょっと覚えづらいかも知れませんが、使い方は簡単です。

この記事では、以下の二つの例を解説しています。

  • np.concatenateで一次元配列同士を結合する
  • np.concatenateで多次元配列同士を結合する


これらの方法がわからない方はこの記事を読んで、使い方をマスターしちゃいましょう!

目次

np.concatenateの使い方

※この記事のコードは、jupyter notebookjuputer labを使って書かれています。
コードを試すときは是非これらを使ってみてください。

サンプル配列の用意

まずはnp.concatenateの動作を確かめるために、サンプル配列を用意します。

# コード In [1]:
import numpy as np
# コード In [2]:
def array_info(x):
    print("配列のshape", x.shape)
    print("配列の要素のデータ型", x.dtype)
    print("配列の中身n",x,"n")

a = np.arange(0, 5 )
b = np.arange(5, 10)
c = np.arange(10,20)
c = np.reshape(c, (2,5))
# コード In [3]:
array_info(a)
array_info(b)
array_info(c)
# 出力結果 [3]:
配列のshape (5,)
配列の要素のデータ型 int64
配列の中身
 [0 1 2 3 4]

配列のshape (5,)
配列の要素のデータ型 int64
配列の中身
 [5 6 7 8 9]

配列のshape (2, 5)
配列の要素のデータ型 int64
配列の中身
 [[10 11 12 13 14]
 [15 16 17 18 19]]

一次元配列同士の連結

np.concatenateを使って、一次元配列同士を連結させてみましょう。

# コード In [4]:
concat_ab = np.concatenate([a,b])
concat_ab_axis0 = np.concatenate([a,b], axis=0) # 上と同じ結果になります

print(concat_ab)
print(concat_ab_axis0)
# 出力結果 [4]:
[0 1 2 3 4 5 6 7 8 9]
[0 1 2 3 4 5 6 7 8 9]

このように、np.concatenateで配列aに配列bの要素を追加した新しい配列を作ることができます。また、一次元配列同士のconcatenateでは、axisに1以上の値を指定するとエラーになります。

# コード In [5]:
np.concatenate([a,b], axis=1)

[発生するエラー]

---------------------------------------------------------------------------
AxisError                                 Traceback (most recent call last)
<ipython-input-5-9a119ef218a7> in <module>()
----> 1 np.concatenate([a,b], axis=1)

AxisError: axis 1 is out of bounds for array of dimension 1

2次元配列同士の連結

2次元配列などの多次元配列でも、この関数を使って結合する事ができます。axisの値でどの軸方向に連結するかを決められるので、この値に注意してください。まずは最初に作ったaとbの配列を2次元配列化しておきましょう。

# コード In [6]:
a2 = a[None,:]
b2 = b[None,:]

array_info(a2)
array_info(b2)
# 出力結果 [6]:
配列のshape (1, 5)
配列の要素のデータ型 int64
配列の中身
 [[0 1 2 3 4]]

配列のshape (1, 5)
配列の要素のデータ型 int64
配列の中身
 [[5 6 7 8 9]]

それではa2, b2, cの配列を使ったサンプルコードを見てみましょう。

# コード In [7]:
concat_a2b2_axis0 = np.concatenate([a2,b2], axis=0)
concat_a2b2_axis1 = np.concatenate([a2,b2,a2], axis=1)

array_info(concat_a2b2_axis0)
array_info(concat_a2b2_axis1)
# 出力結果 [7]:
配列のshape (2, 5)
配列の要素のデータ型 int64
配列の中身
 [[0 1 2 3 4]
 [5 6 7 8 9]]

配列のshape (1, 15)
配列の要素のデータ型 int64
配列の中身
 [[0 1 2 3 4 5 6 7 8 9 0 1 2 3 4]]

axisの指定方法はnp.sumなどと同じです。

つまりaxisに指定した軸方向に新しい要素を追加するため、axisによっては配列の形状が噛み合わないとエラーが発生します。

# コード In [8]:
np.concatenate([a2,c], axis=0)
# 出力結果 Out [8]:
array([[ 0,  1,  2,  3,  4],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19]])
# コード In [9]:
np.concatenate([a2,c], axis=1)

[発生するエラー]

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-9-0ebc4fe6d126> in <module>()
----> 1 np.concatenate([a2,c], axis=1)

ValueError: all the input array dimensions except for the concatenation axis must match exactly

まとめ

この記事では、np.concatenateを使った配列同士の結合操作について解説しました。このような操作はプログラミングをしていく中で必ず必要になる基本的なものです。是非とも習得して役に立ててくださいね!

この記事を書いた人

【プロフィール】
DX認定取得事業者に選定されている株式会社SAMURAIのマーケティング・コミュニケーション部が運営。「質の高いIT教育を、すべての人に」をミッションに、IT・プログラミングを学び始めた初学者の方に向け記事を執筆。
累計指導者数4万5,000名以上のプログラミングスクール「侍エンジニア」、累計登録者数1万8,000人以上のオンライン学習サービス「侍テラコヤ」で扱う教材開発のノウハウ、2013年の創業から運営で得た知見に基づき、記事の執筆だけでなく編集・監修も担当しています。
【専門分野】
IT/Web開発/AI・ロボット開発/インフラ開発/ゲーム開発/AI/Webデザイン

目次