M
の行列があり16384 x 81
ます。計算したいM * M.t
(結果は になります16384x16384
)。
私の質問は:誰かが実行時間の違いを説明してもらえますか?
C++ で OpenCV を使用すると、次のコードに18 秒かかります
#include <cv.h>
#include <cstdio>
using namespace cv;
int main(void) {
Mat m(16384, 81, CV_32FC1);
randu(m, Scalar(0), Scalar(1));
int64 tic = getTickCount();
Mat m2 = m * m.t();
printf("%f", (getTickCount() - tic) / getTickFrequency());
}
Python では、次のコードは0.9 秒18.8 秒しか かかりません(以下のコメントを参照)
import numpy as np
from time import time
m = np.random.rand(16384, 81)
tic = time()
result = np.dot(m, m.T)
print (time() - tic)
MATLAB では、次のコードは17.7 秒かかります
m = rand(16384, 81);
tic;
result = m * m';
toc;
私の唯一の推測は、それがメモリの問題であり、どういうわけか Python がスワップ スペースを回避できるということでした。top
しかし、私が見ているとき、私はすべてのメモリを使用しているのを見ていないので、その日は勝つC++ application
と思っていました. C++
洞察をありがとう。
編集
操作の時間だけを計るように私の例を修正した後、コードは Python でも 18 秒かかるようになりました。何が起こっているのかよくわかりませんが、十分なメモリがあれば、すべて同じように動作するようです。
行数が 8192 の場合のタイミングは次のとおりです。 C++: 4.5 秒 Python: 4.2 秒 Matlab: 1.8 秒