Matlab:虽然操作较少,但执行速度较慢



我是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,我将代码放在单个函数中,删除循环并使用timeit。结果如下:

# a(:, [1, 2]) = bsxfun(@minus, a(:, [1, 2]), [1, 1]);
1.0064e-04
# a = bsxfun(@minus, a, [1, 1, 0]);
6.4187e-05

第一种方法的开销来自子矩阵切片。将其更改为

tic;
b=a(:,[1,2]);
for i = 1:100
b = bsxfun(@minus, b, [1, 1]);
end
a(:,[1,2])=b;
toc

使明显更快

相关内容

  • 没有找到相关文章