[Numpy]1次元配列の結合の視覚的イメージ+コード紹介

記事内に広告が含まれています。

numpyの1次元の配列同士を結合する方法について、様々なメソッドが用意されています。しかし、実際に使う際によくごちゃごちゃになってしまいます。

そこで、各手法に関して、厳密な議論はせずに視覚的なイメージを重視して整理したいと思います。注意として、扱いやすそうなものをいくつかピックアップしてすぐに使えるようになることを意識しており、本記事の他にもやり方はあることを念頭に置いていただきたいです。

本記事で扱うのは以下の3つのパターンの結合です。

本記事で取り上げる配列の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次元配列です。

パターン3の視覚的なイメージ図。与えられた
1次元配列を縦方向に立てて結合させる感覚
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()の基本的な使い方結合する配列ndarrayのリストを指定結合する軸(次元)を指定: 引数...
Array manipulation routines — NumPy v1.25 Manual

以下の2つは np.r_ と np.c_ のメソッドに関するドキュメントです。

numpy.c_ — NumPy v1.25 Manual
numpy.r_ — NumPy v1.25 Manual

Python
スポンサーリンク

コメント