LoginSignup
7
2

More than 3 years have passed since last update.

numpyの1次元配列のshapeがややこしかった

Posted at

概要

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の一次元配列では行ベクトルと列ベクトルの区別はない。

7
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
2