numpyの1次元の配列同士を結合する方法について、様々なメソッドが用意されています。しかし、実際に使う際によくごちゃごちゃになってしまいます。
そこで、各手法に関して、厳密な議論はせずに視覚的なイメージを重視して整理したいと思います。注意として、扱いやすそうなものをいくつかピックアップしてすぐに使えるようになることを意識しており、本記事の他にもやり方はあることを念頭に置いていただきたいです。
本記事で扱うのは以下の3つのパターンの結合です。
テストに用いる配列
以下の2種類の1次元配列を用いてデモします。
import numpy as np
a = np.array([1,2,3])
b = np.array([4,5,6])
パターン1. 1次元の配列を返す結合方法
これは1次元配列同士をaxis=0方向に繋げる方法です。簡単に言えば横に長くなる結合です。
np.concatenate([a,b])
np.hstack([a,b])
np.r_[a,b]
一つ目のコードを試してみます。
test1 = np.concatenate([a,b]) #a = np.array([1,2,3]), b = np.array([4,5,6])
print(test1)
print(np.shape(test1))
#[1 2 3 4 5 6]
#(6,)
パターン2. 2次元配列として返す(1)
これは2つの配列を積み上げるようなイメージの結合方法です。列方向(横方向)の要素数は変わらず、行方向(縦方向)が2行に増えます。このパターンの結合には、以下の2種類の方法が用意されています。
np.stack([a,b])
np.vstack([a,b])
np.row_stack([a,b])
np.stack() を試してみます
test2 = np.stack([a,b]) #a = np.array([1,2,3]), b = np.array([4,5,6])
print(test2)
print(np.shape(test2))
#[[1 2 3]
# [4 5 6]]
# (2, 3)
パターン3. 2次元配列として返す(2)
これは1次元配列を立てて組み合わせるようなイメージです。出来上がるのは列方向の次元が2に増えた2次元配列です。
np.stack([a,b], axis=1)
np.c_[a,b]
np.column_stack([a,b])
np.column_stack() を試してみます。
test3 = np.column_stack([a,b]) #a = np.array([1,2,3]), b = np.array([4,5,6])
print(test3)
print(np.shape(test3))
#[[1 4]
# [2 5]
# [3 6]]
# (3, 2)
まとめ・参考
numpyで1次元配列を結合する方法を視覚的イメージを重視して整理しました。
結合する際のaxisの指定次第で、同じメソッドでもパターン1になったりパターン2になったりしますが、省略している部分もあります。以下のリンクに各メソッドの詳細があるので参考にしてください。
参考にした記事は以下の通りです。
以下の2つのリンクには、多数の配列の結合方法がまとめられています。
NumPy配列ndarrayを結合(concatenate, stack, blockなど) | note.nkmk.me
複数のNumPy配列ndarrayを結合(連結)するnumpy.concatenate()やnumpy.stack()などの関数の使い方を説明する。 numpy.concatenate()の基本的な使い方結合する配列ndarrayのリストを...
Array manipulation routines — NumPy v2.0 Manual
以下の2つは np.r_ と np.c_ のメソッドに関するドキュメントです。
numpy.c_ — NumPy v2.0 Manual
numpy.r_ — NumPy v2.0 Manual
リンク
コメント