logo

Pythonのnumpy arrayで行の結合と列の結合の方法 📂プログラミング

Pythonのnumpy arrayで行の結合と列の結合の方法

コード

import numpy as np

a = np.array([[1,2,3]])
b = np.array([[4,5,6]])

print(a)
print(b)
print(np.c_[a,b])
print(np.r_[a,b])

Pythonのnumpyパッケージは、非常に便利な機能を多く提供する。以下のスクリーンショットで見るように、オブジェクトnumpy.c_numpy.r_は、それぞれ角括弧[]内に入った配列を列(column)結合、行(row)結合した配列である。これらがメソッドではないことをはっきりさせておこう。メソッドのように使われているけど、実際は角括弧[]で囲まれたものをすでに結合した配列に過ぎない。文法的に混乱するかもしれないから、少なくとも一度はちゃんと理解しておく必要がある。エラーもすぐに見つけられるだろう。

20191104_095611.png

注意すべきもう一つのことは、配列を作るときに二重の[], つまり[[]]で囲って作ったことだ。この場合、私たちの直感通り、希望した通りに行結合と列結合を実装することができた。一方で、上のコードと同じだけれども、一重の角括弧[]で配列を作る次のコードを実行して、その結果を見てみよう。

import numpy as np

a = np.array([1,2,3])
b = np.array([4,5,6])

print(a)
print(b)
print(np.c_[a,b])
print(np.r_[a,b])

20191104_102825.png

上の直感的な実行結果と下の違いは、1次元配列か2次元配列かにある。上の場合は、配列を作る段階で既に我々の目には横、縦の概念があるが、下の場合はベクトルに移行したため、見た目と異なるようになる。このように実装された理由は、numpyパッケージが数学に特化しているからだと受け入れても良い。 $$ \overrightarrow{v} = (\pi , 0.7) = \begin{bmatrix} \pi \\ 0.7 \end{bmatrix} $$ 例えば、座標平面、つまり$2$次元ユークリッド空間のあるベクトル$\overrightarrow{v}$ は、$2$個の成分を持つベクトル(1次元配列)でありながら同時に$\overrightarrow{v} \in \mathbb{R}^{2 \times 1}$行列(2次元配列)であるため、このように二つの表現を使うことができる。 numpyパッケージの場合は、より一般的な表現に対応できるように、行列―それ以上にテンソルのコンベンションに従っている。