k = rand(15,15)
v = rand(6,15)
C = diag(v(1:6,:) * k * v(1:6,:)')'
@adriaan建议的一个小基准测试表明,g()的速度是原来的17倍:
k = rand(1500,1500);
v = rand(1000,1500);
f = @() fun(k,v);
g = @() diag(v(1:600,:) * k * v(1:600,:)')';
timeit(f) % Time: 0.5122
timeit(g) % Time: 0.0332
function C = fun(k,v)
C = zeros(1,600);
for i = 1:600
C(i) = v(i, :) * k * v(i, :)';
end
end
1条答案
按热度按时间jvlzgdj91#
下面的内容将会给您带来相同的结果。对于中等大小的阵列(大约1.5k),这比
for
循环快15倍。@adriaan建议的一个小基准测试表明,
g()
的速度是原来的17倍:这里应该明确的是,
for
循环不是罪魁祸首,而是向量矩阵与矩阵矩阵运算的底层BLAS实现;后者在MKL中得到了高度优化。