我有一个高矩阵(下面的例子是10000乘3000)我想要内部产品的行的子集(例如,500行).对于不同的,随机选择的行重复多次(在该示例中为100次,但实际上多次).事实证明索引A(sub,:)相当慢.在我的例子中,最好乘以整个矩阵A(即10000行),而不是选择性地选择和乘以实际需要的500.
行索引(sub = randperm(10000); sub = sub(1:500);)的随机生成在计算上是便宜的; 我把它放在两个循环中以便公平.
A=randn(10000,3000);
g=zeros(10000,1);
tic
for i=1:100
sub = randperm(10000); sub = sub(1:500);
b=randn(3000,1);
g(sub) = g(sub) + A(sub,:)*b;
end
toc
% elapsed time is 1.58 sec
tic
for i=1:100
sub = randperm(10000); sub = sub(1:500);
b=randn(3000,1);
g = g + A*b;
end
toc
% elapsed time is 1.28 sec
Run Code Online (Sandbox Code Playgroud)
问题是:当实际只需要一部分行时,有没有办法加快速度?