備忘録_Python_Numpyの多次元配列

備忘録_Python_Numpyの多次元配列

多次元配列

多次元配列とは、簡単に言うと「数字の集合」である。数字が1列に並んだものや長方形状に並べたもの、3次元に並べたものやN次元状にならべたものを多次元配列をいう。

1次元配列

>>>import numpy as np
>>>A = np.array([1,2,3,4])
>>>print(A)
[1 2 3 4]
>>>np.ndim(A)
1
>>>A.shape
(4,)
>>>A.shape[0]
4

 np.ndim()

配列の次元数取得

インスタンス変数shape

配列の形状取得

2次元配列

>>>B = np.array([[1,2], [3,4], [5,6]])
>>>print(B)
[[1 2]
 [3 4]
 [5 6]]
>>>np.ndim(B)
2
>>>B.shape
(3, 2)

「3×2の配列」を作成。3×2の配列とは、最初の次元に3つの要素があり、次の次元に2つの要素があるという意味である。
2次元配列は行列(matrix)と呼び、配列の横方向の並びを行(row)、縦方向の並びを列(column)と呼ぶ。

行列の積

行列の積とは左側の行列の行と右側の行列の列の間の要素ごとの積とその和によって計算が行われる。そして、その計算の結果は新しい多次元配列の要素として格納される。

 

Aの1行目とBの1列目の結果は1行1列目の要素、Aの2行目Bの1列目は2行1列目の要素となる。

>>>A = np.array([[1,2],[3,4]])
>>>A.shape
(2, 2)
>>>B=np.array([[5,6],[7,8]])
>>>B.shape
(2, 2)
>>>np.dot(A,B)
array([[19, 22],
       [43, 50]])

np.dot()

1次元配列の場合はベクトルを、2次元配列では行列の積を計算する。

np.dot(A,B)とnp.dot(B,A)は異なる値になりえる。通常の演算と違って行列の積では、被演算子の順番が異なると結果も異なる。

別の形状の行列の積

2×3の行列Aと3×2の行列Bの積の実装

>>>A=np.array([[1,2,3],[4,5,6]])
>>>A.shape
(2, 3)
>>>B=np.array([[1,2],[3,4],[5,6]])
>>>B.shape
(3, 2)
>>>np.dot(A,B)
array([[22, 28],
       [49, 64]])

行列Aの1次元目の要素数(列数)と行列Bの0次元目の要素数(行数)を同じ値にする必要がある。もしこの値が異なれば、行列の積は計算できない(下記はPythonで行った場合のエラー)。

>>>C=np.array([[1,2],[3,4]])
>>>C.shape
(2, 2)
>>>A.shape
(2, 3)
>>>np.dot(A,C)
Traceback (most recent call last):
  File "C:\ProgramData\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2910, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-30-bef0a2d6fb5b>", line 1, in <module>
    np.dot(A,C)
ValueError: shapes (2,3) and (2,2) not aligned: 3 (dim 1) != 2 (dim 0)

メモ

PyCharmではPython Consoleを使って以前コマンドプロンプト上で使用した対話型インタプリタを実行できる。メニューバーの『Tools』、『Python Console』を選択で起動する。