2016-12-01 8 views
0

2つのnumPy行列があるときは、それらを乗算するドット関数を呼び出すことができます。または、それぞれ手動でループし、各値を手動で掛けることもできます。なぜ、速度の違いは何ですか?確かにドット機能はまだそれを行う必要がありますが、低レベルですか?行列の乗算とループスルーの基本的な違いは何ですか?

答えて

1

はい、どちらの方法も2つの行列の値をループする必要があります。しかし、Pythonは動的に型指定されているので、ループの本体は、繰り返しに使用される3つのインデックスの型をチェックし、2つの入力行列のインデックス付けがサポートされ、行列から抽出された値の型を決定する必要があります。

numpyの実装は、あなたが言ったように、低レベルであり、入力と出力についてより強力な前提があります。特に、行列乗算は、型チェックのオーバーヘッドが消えるように、静的型付き言語(CまたはFortran - 私は覚えがたい)で実装されています。さらに、低レベル言語での索引付けは、比較的簡単な操作です。

+0

それとは別に、明示的なPythonループでのループ処理は、コンパイルされたコードによるループ処理よりも遅くなります。また、Numpyに任せるのではなくPythonで算術演算を行っているのであれば、マシンの浮動小数点数や整数とそれに相当するPython数値オブジェクトを前後に変換するオーバーヘッドがあります。Pythonの不変数値で算術演算を遅くするオブジェクト。 –

関連する問題