小编Yan*_*doc的帖子

向量与子矩阵的乘法很慢

我有一个高矩阵(下面的例子是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)

问题是:当实际只需要一部分行时,有没有办法加快速度?

matlab matrix-multiplication

5
推荐指数
1
解决办法
269
查看次数

标签 统计

matlab ×1

matrix-multiplication ×1