次に2次元配列を使ってみよう.リストのリストを np.array()
関数で行列に変換することができます.
行列の定義
import numpy as np # プログラムの先頭でモジュールを読み込む
# 行列
A = np.array([[1, 2], [3, 4]])
print(A)
[[1 2] [3 4]]
行列の定義
B = np.array([[7,8], [9, 10]])
print(B)
[[ 7 8] [ 9 10]]
行列に対して +
や *
演算子を使用すると,要素ごとに処理されます.
要素ごとの和
C = A + B # 要素ごとの和
print(C)
[[ 8 10] [12 14]]
行列の要素ごとの積はアダマール積と呼ばれます.
要素ごとの積(アダマール積)
C = A * B # 要素ごとの積
print(C)
[[ 7 16] [27 40]]
行列の積は np.dot()
関数や Python の @
演算子を利用すると良いでしょう.どちらも同じ結果になり,処理速度に大きな差はありません.
行列の積
C = np.dot(A, B) # 行列の積
# 1x7+2x9, 1x8+2x10
# 3x7+4x9, 3x8+4x10
print(C)
[[25 28] [57 64]]
行列の積 (@演算子)
C = A @ B
print(C)
[[25 28] [57 64]]
行列の転置には np.transpose()
関数を利用できるが,これ以外にもいくつかの記述方法があります.
行列の転置1
print(A)
print(np.transpose(A))
[[1 2] [3 4]] [[1 3] [2 4]]
行列の転置2
print(A.transpose())
[[1 3] [2 4]]
行列の転置3
print(A.T)
[[1 3] [2 4]]
例えば,「ゴチ」バトルの例で,商品価格の一覧が [50, 60, 70, 80, 90, 100]
で与えられるとき,注文の組み合わせ x
ごとに合計価格を求めたいような場合は,次のようにすると良いでしょう.詳細はここの図で確認してください.集団 \(P\) の合計価格を求めています.
行列の転置4
# 価格の一覧
w = np.array([50, 60, 70, 80, 90, 100])
# 注文方法(0は注文しない,1は注文する)
x = np.array([
[0, 1, 0, 0, 1, 1], # この行は 60, 90, 100円の商品を注文することを意味している
[0, 1, 1, 1, 0, 0],
[1, 1, 0, 0, 0, 0],
[0, 1, 1, 1, 0, 1]
])
print('価格の一覧:', w)
print('注文方法')
print(x)
total = np.dot(x,w)
print('合計価格:', total)
価格の一覧: [ 50 60 70 80 90 100] 注文方法 [[0 1 0 0 1 1] [0 1 1 1 0 0] [1 1 0 0 0 0] [0 1 1 1 0 1]] 合計価格: [250 210 110 310]