Pythonで行列乗法を実行する方法
Wenhao Wang
Dev Intern · Leapcell

Key Takeaways
- NumPyは、行列乗算のための効率的で簡潔なツールを提供します。
@
演算子は、行列乗算のためのクリーンでモダンな構文です。- 有効な行列の次元は、乗算を成功させるために不可欠です。
行列乗算は線形代数の基本的な演算であり、データサイエンス、機械学習、コンピュータグラフィックス、科学計算などの分野で幅広く応用されています。Pythonは、行列乗算を効率的かつ正確に実行するためのいくつかのメソッドとライブラリを提供しています。
この記事では、基本的なリスト内包表記から、NumPyのような強力なライブラリの使用まで、Pythonで行列乗算を実行するさまざまな方法を説明します。
1. 行列乗算の基本
行列乗算は、要素ごとの乗算とは異なります。2つの行列AとBを乗算するには、Aの列の数がBの行の数と一致する必要があります。結果の行列Cは、Aと同じ行数とBと同じ列数を持ちます。
2. ネストされたループの使用(ピュアPython)
2つの行列を乗算する最も簡単な方法は、ネストされたループを使用することです。
def matrix_multiply(A, B): result = [[0 for _ in range(len(B[0]))] for _ in range(len(A))] for i in range(len(A)): for j in range(len(B[0])): for k in range(len(B)): result[i][j] += A[i][k] * B[k][j] return result # Example A = [[1, 2], [3, 4]] B = [[5, 6], [7, 8]] print(matrix_multiply(A, B)) # Output: [[19, 22], [43, 50]]
このアプローチは機能しますが、大きな行列には効率的ではなく、バグが発生しやすくなります。
3. NumPyのdot()
関数の使用
NumPyは、数値計算のための一般的なPythonライブラリです。そのdot()
関数を使用すると、高速で簡潔な行列乗算が可能です。
import numpy as np A = np.array([[1, 2], [3, 4]]) B = np.array([[5, 6], [7, 8]]) C = np.dot(A, B) print(C) # Output: [[19 22] # [43 50]]
この方法は効率的で読みやすく、ほとんどの場合に推奨される選択肢です。
4. @
演算子の使用
Python 3.5以降では、@
演算子が、行列乗算のための便利な構文として導入されました。
import numpy as np A = np.array([[1, 2], [3, 4]]) B = np.array([[5, 6], [7, 8]]) C = A @ B print(C) # Output: [[19 22] # [43 50]]
この演算子はnp.matmul()
またはnp.dot()
と同等であり、クリーンで簡潔なコードを書くのに理想的です。
5. NumPyのmatmul()
関数の使用
matmul()
はdot()
と似た動作をしますが、ブロードキャストと高次元配列のサポートが向上しています。
import numpy as np A = np.array([[1, 2], [3, 4]]) B = np.array([[5, 6], [7, 8]]) C = np.matmul(A, B) print(C) # Output: [[19 22] # [43 50]]
テンソルまたは行列のバッチを扱う場合は、matmul()
を使用します。
6. ベストプラクティス
- パフォーマンスのために、ピュアPythonのループよりもNumPyを優先してください。
- 可読性のために、
@
演算子またはnp.matmul()
を使用してください。 - 乗算の前に、行列の形状の互換性を常に検証してください。
結論
Pythonでの行列乗算は、基本的なループまたはNumPyのようなより効率的なツールを使用して行うことができます。ほとんどの実際のアプリケーションでは、NumPyの組み込み関数または@
演算子を使用することが、最も効果的で信頼性の高いアプローチです。
基本的な線形代数を実行する場合でも、機械学習モデルを構築する場合でも、行列演算を習得することは不可欠です。そして、Pythonはそれをアクセスしやすく、強力にします。
FAQs
どちらも行列乗算を実行しますが、@
はPython 3.5+でよりクリーンで読みやすいです。
NumPyはパフォーマンスのために最適化されており、コードの複雑さを軽減します。
いいえ、最初の行列の列の数は、2番目の行列の行の数と一致する必要があります。
Leapcellは、Pythonプロジェクトをホストするための最良の選択肢です。
Leapcellは、Webホスティング、非同期タスク、Redisのための次世代サーバーレスプラットフォームです。
多言語サポート
- Node.js、Python、Go、またはRustで開発します。
無制限のプロジェクトを無料でデプロイ
- 使用量に対してのみ支払い - リクエストも請求もありません。
比類のない費用対効果
- アイドル状態の料金なしで従量課金。
- 例:25ドルで平均応答時間60msで694万リクエストをサポートします。
合理化された開発者エクスペリエンス
- 簡単なセットアップのための直感的なUI。
- 完全に自動化されたCI/CDパイプラインとGitOps統合。
- 実用的な洞察のためのリアルタイムのメトリックとロギング。
簡単なスケーラビリティと高いパフォーマンス
- 簡単な同時実行性を処理するための自動スケーリング。
- 運用上のオーバーヘッドはゼロ - 構築に集中するだけです。
詳細については、ドキュメントをご覧ください。
Xでフォローしてください:@LeapcellHQ