PythonのNumpyを使って行列の足し算・引き算・掛け算や転置行列などを行う方法

スポンサーリンク

Pythonの行列は,2次元リストまたは2次元配列の形で実装することができます.Python Matrix の演算を行うには、Python NumPy モジュールをインポートする必要があります。

Python Matrix は、統計、データ処理、画像処理などの分野で必要不可欠です。


スポンサーリンク

Python Matrixの作成

Python Matrixは、以下のいずれかの手法で作成することができます。

  • リストを使用する方法
  • arange() メソッドによるもの
  • matrix()メソッドによるもの

1. リストを用いた行列の作成

numpy.array()`関数は、リストを入力として配列を作成することができる。

例えば、以下の様になります。

import numpy
input_arr = numpy.array([[ 10, 20, 30],[ 40, 50, 60]])
print(input_arr)

結果は以下の通りです。

[[10 20 30]
 [40 50 60]]

上で見たように、出力は与えられた入力の集合をリスト形式で表した2次元の行列を表しています。

2. numpy.arange()」関数を使った行列の作成

numpy.arange()`関数とリスト入力を使って、Pythonで行列を作成することができます。

例えば、以下の様になります。

import numpy
 
print(numpy.array([numpy.arange(10,15), numpy.arange(15,20)]))

結果は以下の通りです。

[[10 11 12 13 14]
 [15 16 17 18 19]]

3. numpy.matrix()関数」による行列の作成

Pythonで行列を作成するには、numpy.matrix()関数を使用します。

構文は以下の通りです。

numpy.matrix(input,dtype)
  • 入力。input: 行列を作るために入力される要素。
  • dtype: 対応する出力のデータ型.

例えば、以下の様になります。

import numpy as p
 
 
matA = p.matrix([[10, 20], [30, 40]]) 
print('MatrixA:
'
, matA)
 
 
 
matB = p.matrix('[10,20;30,40]', dtype=p.int32)  # Setting the data-type to int
print('
MatrixB:
'
, matB)

結果は、以下の通りになります。

MatrixA:
 [[10 20]
 [30 40]]
 
MatrixB:
 [[10 20]
 [30 40]]

Pythonで行列の足し算をします。

Matricesの加算操作は、以下の方法で行うことができます。

  • 従来の方法
  • 演算子「+」を使用する方法

1. 従来の方法

この伝統的な方法では、基本的にユーザーから入力を受け取り、forループ(行列の要素を巡回する)と「+」演算子を用いて加算演算を行う。

例えば、以下の様になります。

import numpy as p
 
 
ar1 = p.matrix([[11, 22], [33, 44]]) 
ar2 = p.matrix([[55, 66], [77, 88]]) 
res = p.matrix(p.zeros((2,2))) 
print('Matrix ar1 :
'
, ar1)
print('
Matrix ar2 :
'
, ar2)
 
# traditional code
for x in range(ar1.shape[1]):
    for y in range(ar2.shape[0]):
        res[x, y] = ar1[x, y] + ar2[x, y]
 
print('
Result :
'
, res)

注意:Matrix.shapeは、特定の行列の次元を返す。

結果は以下の通りです。

Matrix ar1 :
 [[11 22]
 [33 44]]
 
Matrix ar2 :
 [[55 66]
 [77 88]]
 
Result :
 [[  66.   88.]
 [ 110.  132.]]

2. 演算子「+」の使用

この方法は、LOC(コード行数)を減らし、コードを最適化するため、より良い効率を提供します。

例えば、以下の様になります。

import numpy as p
 
 
ar1 = p.matrix([[11, 22], [33, 44]]) 
ar2 = p.matrix([[55, 66], [77, 88]]) 
res = p.matrix(p.zeros((2,2))) 
print('Matrix ar1 :
'
, ar1)
print('
Matrix ar2 :
'
, ar2)
 
res = ar1 + ar2 # using '+' operator
 
print('
Result :
'
, res)

結果は、以下の通りになります。

Matrix ar1 :
 [[11 22]
 [33 44]]
 
Matrix ar2 :
 [[55 66]
 [77 88]]
 
Result :
 [[ 66  88]
 [110 132]]

Pythonで行列の掛け算をします。

Pythonでの行列の乗算は、以下の方法で提供することができます。

  • スカラー積
  • 行列の積

スカラー積

スカラー積では、スカラー値/定数値を行列の各要素に乗算します。

スカラー値と入力された行列要素の乗算には、’ⅳ*’演算子が使用されます。

例えば、以下の様になります。

import numpy as p
 
matA = p.matrix([[11, 22], [33, 44]]) 
 
print("Matrix A:
"
, matA)
print("Scalar Product of Matrix A:
"
, matA * 10)

結果は以下の通りです。

Matrix A:
 [[11 22]
 [33 44]]
Scalar Product of Matrix A:
 [[110 220]
 [330 440]]

マトリクス製品

前述のように、スカラー倍算にのみ’ *’演算子を使用することができます。

Matrixの乗算を行うには、numpy.dot()関数を使用する必要があります。

numpy.dot()`関数はNumPyの配列をパラメータ値として受け取り、行列の乗算の基本的なルールに従って乗算を実行します。

例えば、以下の様になります。

import numpy as p
 
matA = p.matrix([[11, 22], [33, 44]]) 
matB = p.matrix([[2,2], [2,2]])
 
print("Matrix A:
"
, matA)
print("Matrix B:
"
, matB)
print("Dot Product of Matrix A and Matrix B:
"
, p.dot(matA, matB))

結果は以下の通りです。

Matrix A:
 [[11 22]
 [33 44]]
Matrix B:
 [[2 2]
 [2 2]]
Dot Product of Matrix A and Matrix B:
 [[ 66  66]
 [154 154]]

Python 行列の引き算

演算子’-‘は、Python Matrixの減算を行うために使用されます。

例えば、以下の様になります。

import numpy as p
 
matA = p.matrix([[11, 22], [33, 44]]) 
matB = p.matrix([[2,2], [2,2]])
 
print("Matrix A:
"
, matA)
print("Matrix B:
"
, matB)
print("Subtraction of Matrix A and Matrix B:
"
,(matA - matB))

結果は、以下の通りになります。

Matrix A:
 [[11 22]
 [33 44]]
Matrix B:
 [[2 2]
 [2 2]]
Subtraction of Matrix A and Matrix B:
 [[ 9 20]
 [31 42]]

Python マトリックスの分割

スカラー除算は、PythonのMatrixの要素に対して、’/’演算子を用いて実行することができます。

演算子は、Matrix の各要素をスカラー値/定数値で割ります。

例えば、以下の様になります。

import numpy as p
 
 
matB = p.matrix([[2,2], [2,2]])
 
 
print("Matrix B:
"
, matB)
print("Matrix B after Scalar Division operation:
"
,(matB/2))

結果は以下の通りです。

Matrix B:
 [[2 2]
 [2 2]]
Matrix B after Scalar Division operation:
 [[ 1.  1.]
 [ 1.  1.]]

Python 行列の転置法

行列の転置は基本的に、対応する対角線上で行列を反転させることを意味します。

つまり、入力行列の行と列を入れ替えます。

行は列になり、列は行になります。

例えば 例えば、次元が3×2、つまり3行2列の行列Aを考えてみましょう。

転置演算を行った後の行列 A の次元は、2×3、つまり 2 行 3 列になります。

Matrix.T` は基本的に、入力行列の転置を行い、転置演算の結果として新しい行列を生成します。

例えば、以下の様になります。

import numpy
  
matA = numpy.array([numpy.arange(10,15), numpy.arange(15,20)])
print("Original Matrix A:
"
)
print(matA)
print('
Dimensions of the original MatrixA: '
,matA.shape)
print("
Transpose of Matrix A:
"
)
res = matA.T
print(res)
print('
Dimensions of the Matrix A after performing the Transpose Operation:  '
,res.shape)

結果は以下の通りです。

Original Matrix A:
 
[[10 11 12 13 14]
 [15 16 17 18 19]]
 
Dimensions of the original MatrixA: (2, 5)
 
Transpose of Matrix A:
  
[[10 15]
 [11 16]
 [12 17]
 [13 18]
 [14 19]]
 
Dimensions of the Matrix A after performing the Transpose Operation: (5, 2)

上記のコードでは、2×5次元、すなわち2行5列の行列を作成しました。

転置演算を実行すると、結果の行列の寸法は5×2、すなわち5行と2列となる。


Python 行列の指数

行列の指数は要素ごとに計算されます。

すなわち、各要素の指数は、入力されたスカラー/定数値のべき乗に要素を上げることで計算されます。

例えば、以下の様になります。

import numpy
  
matA = numpy.array([numpy.arange(0,2), numpy.arange(2,4)])
print("Original Matrix A:
"
)
print(matA)
print("Exponent of the input matrix:
"
)
print(matA ** 2) # finding the exponent of every element of the matrix

結果は以下の通りです。

Original Matrix A:
 
[[0 1]
 [2 3]]
 
Exponent of the input matrix:
 
[[0 1]
 [4 9]]

上記のコードでは、入力行列の各要素の指数を 2 の累乗で求めています。


NumPyのメソッドを用いた行列の乗算演算を行う。

NumPy の Matrix の乗算を行うには、以下の手法を用いることができる。

  • multiply() メソッドの使用
  • matmul()メソッドの使用
  • dot() メソッドの使用 – この記事ですでにカバーされています。

方法1:multiply()メソッドを使用します。

numpy.multiply()`メソッドは、入力された行列に対して要素ごとの乗算を行う。

例えば、以下の様になります。

import numpy as p
 
 
matA = p.matrix([[10, 20], [30, 40]]) 
print('MatrixA:
'
, matA)
 
 
 
matB = p.matrix('[10,20;30,40]', dtype=p.int32)  # Setting the data-type to int
print('
MatrixB:
'
, matB)
 
print("Matrix multplication using numpy.matrix() method")
res = p.multiply(matA,matB)
print(res)

結果は、以下の通りになります。

MatrixA:
 [[10 20]
 [30 40]]
 
MatrixB:
 [[10 20]
 [30 40]]
Matrix multplication using numpy.matrix() method
[[ 100  400]
 [ 900 1600]]

方法2:matmul()メソッドを使用します。

numpy.matmul()`メソッドは入力行列に対して行列積を実行します。

例えば、以下の様になります。

import numpy as p
 
 
matA = p.matrix([[10, 20], [30, 40]]) 
print('MatrixA:
'
, matA)
 
 
 
matB = p.matrix('[10,20;30,40]', dtype=p.int32)  # Setting the data-type to int
print('
MatrixB:
'
, matB)
 
print("Matrix multplication using numpy.matmul() method")
res = p.matmul(matA,matB)
print(res)

結果は、以下の通りになります。

MatrixA:
 [[10 20]
 [30 40]]
 
MatrixB:
 [[10 20]
 [30 40]]
Matrix multplication using numpy.matmul() method
[[ 700 1000]
 [1500 2200]]

読者の皆さんには、NumPyの行列の掛け算を完全に理解するために、以下のチュートリアルに目を通すことを強くお勧めします。


NumPy 行列の転置

関数 numpy.transpose() は入力された行列に対して転置を行い、新しい行列を生成します。

例えば、以下の様になります。

import numpy
  
matA = numpy.array([numpy.arange(10,15), numpy.arange(15,20)])
print("Original Matrix A:
"
)
print(matA)
print('
Dimensions of the original MatrixA: '
,matA.shape)
print("
Transpose of Matrix A:
"
)
res = matA.transpose()
print(res)
print('
Dimensions of the Matrix A after performing the Transpose Operation:  '
,res.shape)

結果は以下の通りです。

Original Matrix A:
 
[[10 11 12 13 14]
 [15 16 17 18 19]]
 
Dimensions of the original MatrixA: (2, 5)
 
Transpose of Matrix A:
  
[[10 15]
 [11 16]
 [12 17]
 [13 18]
 [14 19]]
 
Dimensions of the Matrix A after performing the Transpose Operation: (5, 2)

読むことをお勧めします。


まとめ

この記事では、PythonのMatrixで実行される操作を理解し、NumPyのMatrixの操作についても見てきました。


タイトルとURLをコピーしました