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)結合した配列である。これらがメソッドではないことをはっきりさせておこう。メソッドのように使われているけど、実際は角括弧[]で囲まれたものをすでに結合した配列に過ぎない。文法的に混乱するかもしれないから、少なくとも一度はちゃんと理解しておく必要がある。エラーもすぐに見つけられるだろう。
注意すべきもう一つのことは、配列を作るときに二重の[], つまり[[]]で囲って作ったことだ。この場合、私たちの直感通り、希望した通りに行結合と列結合を実装することができた。一方で、上のコードと同じだけれども、一重の角括弧[]で配列を作る次のコードを実行して、その結果を見てみよう。
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])
上の直感的な実行結果と下の違いは、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
パッケージの場合は、より一般的な表現に対応できるように、行列―それ以上にテンソルのコンベンションに従っている。