#概要
numpy初心者向けの記事です。Pythonを使い始めて間もない頃、1行列のshapeの出力について勘違いしてました。割と引っかかりやすいんじゃないかなと思い、実例をもとに共有いたします。
#例
まず以下のarrayのshapeを見てみる。
a = np.array([[1, 2, 3], [4, 5, 6]])
print(a.shape)
出力は以下のようになります。
(2, 3)
左側に行列の行、右側に列が表示される。数学的にも2行3列と表現されるので納得。
\begin{bmatrix}
1 & 2 & 3 \\
4 & 5 & 6
\end{bmatrix}
行を一つ減らして、再びshapeを出力してみる。
b = np.array([1, 2, 3])
print(b.shape)
出力は以下。
(3, )
...? 1行3列で、(1, 3) が出力されると思ったけど違った。。
以下のように行列積を計算してみる
a = np.array([2, 2])
b = np.array([[1, 2], [3, 4]])
print(np.dot(a, b))
print(np.dot(b, a))
すると、結果は
[ 8 12]
[ 6 14]
行列積の計算の際は、もう一つの行列の shape に応じて、柔軟に行ベクトル、列ベクトルとして計算してくれることがわかる。
#まとめ
一次元配列のshapeは要素が1個のタプルになり、(要素数, )として表現される。数学的には1つの行のみを持つ行列を行ベクトル、1つの列のみを持つ行列を列ベクトルと呼ぶが、ndarrayの一次元配列では行ベクトルと列ベクトルの区別はない。