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

PythonでNumPyを使って2つの行列の乗算を1行で行う方法

行列の乗算とは

行列の乗算は、それぞれの行列の行と列の要素を掛け合わせ、決められた順序で足し合わせていく処理のため、手作業で行うにはかなりの手間がかかります。

行列同士を掛け合わせるには、最初の行列の列数2番目の行列の行数が一致している必要があります。また、計算結果として得られる行列は、「最初の行列の行数 × 2番目の行列の列数」のサイズになります。

小さな行列であれば、ネストしたforループを書いて結果を求めることも可能です。しかし、大きな行列を扱う場合には、Pythonに組み込まれた機能を活用する方がはるかに効率的です。この記事では、両方のアプローチを紹介します。

forループを使った行列の乗算

まずは、2×3と3×2(行×列)の次元を持つ2つの行列を例に考えてみましょう。この場合、乗算の結果は2×2の行列になります。

以下のコードでは、ネストしたforループを使って、行列Aの列と行列Bの行を順番に走査し、対応する要素同士の積を合計していきます。

コード例

# 2行の行列A
A = ([5,10,15],[20,25,30])

# 2列の行列B
B = ([4,8],[12,10],[14,16])

result = [[0 for x in range(2)] for y in range(2)]

for i in range(len(A)):
   # 行列Aの列を反復処理
   for j in range(len(B[0])):
      # 行列Bの行を反復処理
      for k in range(len(B)):
         result[i][j] += A[i][k] * B[k][j]
for r in result:
    print(r)

実行結果

上記のコードを実行すると、次の出力が得られます。

[350, 380]
[800, 890]

NumPyを使った行列の乗算

NumPyには、行列の乗算を実行できる組み込み関数dot()が用意されています。この関数を使えば、プログラムの行数を大幅に減らせるうえ、構文も非常にシンプルになります。

コード例

import numpy as np

# 行列A
matrix_A = ([5,10,15],[20,25,30])

# 行列B
matrix_B = ([4,8],[12,10],[14,16])
result = np.dot(matrix_A,matrix_B)

# 結果を出力
print(result)

実行結果

上記のコードを実行すると、次の出力が得られます。

[[350 380]
[800 890]]
  1. PythonとTensorFlowで2つの行列を乗算する方法を解説

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

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

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