Я новичок в Matlab. Это сценарий моей игровой площадки:
function speedtest()
a = reshape(1:1:30000, 10000, 3);
tic;
for i = 1:100
a(:, [1, 2]) = bsxfun(@minus, a(:, [1, 2]), [1, 1]);
end
toc
tic;
for i = 1:100
a = bsxfun(@minus, a, [1, 1, 0]);
end
toc
end
И время выполнения:
Elapsed time is 0.007709 seconds.
Elapsed time is 0.001803 seconds.
Первый метод работает меньше, но работает намного медленнее. Это проблема векторизации? Если так, то почему Matlab не может «векторизовать» мой a(:, [1, 2])
выбор?
Обновление:
Согласно @thewaywewalk, я поместил код в отдельную функцию, удалите l oop и используйте timeit
. Вот результат:
# a(:, [1, 2]) = bsxfun(@minus, a(:, [1, 2]), [1, 1]);
1.0064e-04
# a = bsxfun(@minus, a, [1, 1, 0]);
6.4187e-05