Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで2つの行列を乗算する方法をわかりやすく解説

2つの行列の乗算が成立するのは、1つ目の行列の列数と2つ目の行列の行数が一致する場合のみです。この条件を満たしていない行列同士は掛け合わせることができないため、計算前に必ず形状を確認しましょう。

ネストしたループによる行列の掛け算

Pythonでは、for文を入れ子にする(ネストする)ことで行列の乗算を実装できます。以下のプログラムでは、3行3列の行列XとYを用意し、その積となる結果行列も3×3の構造になります。計算の仕組みとしては、1つ目の行列の各行の要素と、2つ目の行列の対応する列の要素を順番に掛け合わせて合計していきます。

サンプルコード

X = [[1,2,3],
     [4,5,6],
     [7,8,9]]

Y = [[10,11,12],
     [13,14,15],
     [16,17,18]]

result = [[0,0,0],
          [0,0,0],
          [0,0,0]]

# 行列Xの行を走査
for i in range(len(X)):
    for j in range(len(Y[0])):
        for k in range(len(Y)):
            result[i][j] += X[i][k] * Y[k][j]

for r in result:
    print(r)

実行結果

The result:
[84, 90, 96]
[201, 216, 231]
[318, 342, 366]

NumPyを使ったより簡単な方法

上記のようなループ処理は学習には最適ですが、実務では数値計算ライブラリ「NumPy」を使うのが一般的です。np.dot()関数や@演算子を使えば、わずか数行で行列の積を求められます。

import numpy as np

X = np.array([[1,2,3],[4,5,6],[7,8,9]])
Y = np.array([[10,11,12],[13,14,15],[16,17,18]])

print(np.dot(X, Y))
# または
print(X @ Y)

NumPyは内部で高速化されたC言語の処理を利用しているため、大きな行列を扱う場合でも純粋なPythonのループよりもはるかに高速に動作します。用途に応じて使い分けることをおすすめします。

  1. PythonとTensorFlowで2つの行列を乗算する方法を解説

    TensorFlowは、Googleが提供する機械学習フレームワークです。オープンソースとして公開されており、Pythonと組み合わせてアルゴリズムやディープラーニングアプリケーションなどを実装するために利用されています。研究用途から本番運用まで幅広く使われており、複雑な数学的演算を高速に処理できる最適化技術を備えているのが特長です。 その理由の一つは、NumPyと多次元配列を基盤としている点にあります。この多次元配列は「テンソル」と呼ばれます。TensorFlowは深層ニューラルネットワークの構築をサポートし、高いスケーラビリティを持ち、人気のデータセットが多数付属しています。また、GPUに

  2. PythonとTensorFlowを使って2つの行列を加算する方法

    TensorFlowは、Googleが提供する機械学習フレームワークです。オープンソースとして公開されており、Pythonと組み合わせてアルゴリズムやディープラーニングアプリケーションなどを実装するために広く利用されています。研究用途から本番環境まで幅広い場面で活用されており、複雑な数値計算を高速に実行するための最適化技術が多数搭載されています。この高い処理性能は、NumPyおよび多次元配列の仕組みによって支えられています。これらの多次元配列は「テンソル(tensor)」と呼ばれます。TensorFlowは深層ニューラルネットワークの構築を強力にサポートしており、高い拡張性を持つほか、代表的な