【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を使った配列同士の結合操作について解説しました。このような操作はプログラミングをしていく中で必ず必要になる基本的なものです。是非とも習得して役に立ててくださいね!

LINEで送る
Pocket

「プログラミング、右も左もわからない…」という方にオススメ

当プログラミングスクール「侍エンジニア塾」では、これまで6000人以上のエンジニアを輩出してきました。

その経験を通してプログラミング学習に成功する人は、「目的目標が明確でそれに合わせた学習プランがあること」「常に相談できる人がそばにいること」「自己解決能力が身につくこと」この3つが根付いている傾向を発見しました。

侍エンジニア塾は上記3つの成功ポイントを満たすようなサービス設計に磨きをかけております。

cta_under_bnr

「自分のスタイルや目的に合わせて学習を進めたいな」とお考えの方は、ぜひチェックしてみてください。

書いた人

フクロウ

フクロウ

第一言語はPythonです。
皆さんRustやりましょう。