У меня есть матрица M
То есть 16384 x 81
.Я хочу вычислить M * M.t
(результат будет 16384x16384
).
Мой вопрос: Может кто-нибудь объяснить, пожалуйста, разницу во времени выполнения ?
Использование OpenCV в C ++ следующий код занимает 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)
In MATLAB следующий код занимает 17,7 секунд
m = rand(16384, 81);
tic;
result = m * m';
toc;
Моим единственным предположением было бы то, что это проблема с памятью и что каким-то образом Python может избежать пространства подкачки.Однако, когда я смотрю top
, я не вижу, как C++ application
использует всю память, и я ожидал, что C++
выиграет день.Спасибо за любые идеи.
Редактировать
После пересмотра моих примеров для определения времени только операции, код теперь также занимает 18 секунд с Python.Я действительно не уверен, что происходит, но если памяти достаточно, все они, похоже, теперь работают одинаково.
Вот время, если число строк равно 8192: C ++: 4,5 секунды Python: 4,2 секундыMatlab: 1,8 секунды