行列 A が X にあり、行列 B が Y にある場合。
乗算を行うと、Z = X*Y になります。両方の配列のサイズが同じであると仮定して正しい。
forループでそれを計算するにはどうすればよいですか?
はい、acai は正しいです。Matlab を使い始めたときに同じことを考えたのを覚えています。acai の発言をもう少し詳しく説明すると、LAPACK は Linear Algebra PACKage であり、他の多くの言語がこの種の問題を解決するために使用するものであり、Python は SciPy、Java jlapack などを使用してそれに接続します。BLAS は Basic Linear Algebra です。あなたが求めている行列乗算の基本的な問題を処理するサブルーチン。行列の乗算で Matlab が提供するパフォーマンスを決して超えることはできないという Acai も正しいです。これは彼らのパンとバターであり、これらの操作のパフォーマンスを最適化するために何十年も費やしてきました。
ja72 による anwser は間違っています。理由については、その下にある私のコメントを参照してください。一般に、これらの単純な線形代数演算では、C/mex でコードを記述したとしても、コードがベクトル化されたバージョンを打ち負かすことは不可能です (コードで利用できる特定のスパース構造が行列にある場合を除きます)。 )。その理由は、内部では、Matlab が行列乗算の実際のジョブを Fortran で記述された Lapack ライブラリに渡し、特定のマシン アーキテクチャを考慮して最適化された Blas ライブラリを呼び出すためです。
はい、行列の乗算はA*B
であり、要素ごとはですA*.B
。Aが(NxM)で、Bが(MxK)サイズの場合、のコードC=A*B
は
アップデート
for i=1:N
for j=1:K
C(i,j) = A(i,:)*B(:,j)
end
end