この記事では、複数の配列を結合して新しい配列を生成する、np.concatenateについて紹介します。np.concatenate関数を関数名が長くてちょっと覚えづらいかも知れませんが、使い方は簡単です。
この記事では、以下の二つの例を解説しています。
- np.concatenateで一次元配列同士を結合する
- np.concatenateで多次元配列同士を結合する
これらの方法がわからない方はこの記事を読んで、使い方をマスターしちゃいましょう!
np.concatenateの使い方
サンプル配列の用意
まずは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を使った配列同士の結合操作について解説しました。このような操作はプログラミングをしていく中で必ず必要になる基本的なものです。是非とも習得して役に立ててくださいね!