見出し画像

python:NumPyで行列計算

行列計算は、外部ライブラリのNumpyを使うと便利。Numpyでは行列の計算を使うのに便利なメソッドが多く用意されています。

今回は、その一例を共有いたします。

NumPyの使い方

①numpyをインポート

import numpy as np

numpy を 読み込み、npとして使います。

②配列作成

x = np.array([1, 2, 3])

y = np.array([4, 5 ,6])

上記は1次元配列(ベクトル)です。

③配列計算

print(x + y)

結果

[5 7 9]

配列の要素数が同じでなければエラーが発生してしまいます。

リストでやってみると

x2 = [1, 2, 3]
y2 = [4, 5, 6]

print(x2 + y2)
➡
[1, 2, 3, 4, 5, 6]

リストに要素が足されていくような結果になる。

typeで見ても、numpy.ndarrayになっている。

type(x)

numpy.ndarray

numpy配列とスカラ値(単体)でも計算ができる

import numpy as np

x = np.array([1, 2, 3])
y = np.array([4, 5 ,6])

print(x * 2)
print(y / 2)
➡
[2 4 6]
[2.  2.5 3. ]

2次元配列の作成と計算

import numpy as np

x = np.array([[1, 2], [3, 4]])
x.shape

➡
(2, 2)

[]で囲む数を増やすと2次元配列を作成することができる。shapeで行列の形状を確認できる。

計算

import numpy as np

x = np.array([[1, 2], [3, 4]])
y = np.array([[1, 2], [3, 4]])

print(x * y)

➡
[[ 1  4]
[ 9 16]]

計算②

import numpy as np

x = np.array([[1, 2], [3, 4]])
y = np.array([2, 4])

print(x * y)

➡
[[ 2  8]
[ 6 16]]

2次元配列と1次元配列の計算も可能です。1次元配列がブロードキャストされて、計算される。

要素へのアクセス

import numpy as np

x = np.array([[1, 2], [3, 4]])

print(x[0])
print(x[1][1])

➡
[1 2]
4

リストと同じようにインデックスを[]で囲うとアクセスできる。

for文でも可能

import numpy as np

x = np.array([[1, 2], [3, 4]])

for row in x:
   print(row)

➡
[1 2]
[3 4]

1次元配列への変換

import numpy as np

x = np.array([[1, 2], [3, 4]])
x2 = x.flatten()

print(x)
print(x2)

➡
[[1 2]
[3 4]]
[1 2 3 4]

1次元配列への変換はflattenメソッドを使う。

for文を使うと

import numpy as np

x = np.array([[1, 2], [3, 4]])

for row in x.flatten():
   print(row)
➡
1
2
3
4


1次元に変換してから条件指定

import numpy as np

x = np.array([[1, 2], [3, 4], [5, 6], [7, 8]])
x = x.flatten()

print(x[np.array([0, 2, 5])])

➡
[1 3 6]

xから0番目、2番目、5番目の値を取ってくる。

xから5を超える値をとってくる。

import numpy as np
x = np.array([[1, 2], [3, 4], [5, 6], [7, 8]])
x = x.flatten()
print(x > 5)
print(x[x>5])

➡
[False False False False False  True  True  True]
[6 7 8]

NumPyを使うと簡単に行列計算ができます。

過去記事



この記事が気に入ったらサポートをしてみませんか?