【问题标题】:Speed up a for loop with matrix multiplication?用矩阵乘法加速 for 循环?
【发布时间】:2021-07-29 15:47:08
【问题描述】:

我的程序的一部分包含这段代码:

size2=2500;
gran=3; 

A=ones(size2,size2);

for k=1:gran:(size2-gran)
    for j=1:gran:(size2-gran)

       X=rand*2*pi-pi;

       for h=1:gran
            for l=1:gran

               A(k+l-1,j+h-1) = A(k+l-1,j+h-1) *exp(+1i*X);  %phase in the square gran x gran

            end
        end
    end
end

我的电脑在 0.60 秒内运行此代码,但我想知道是否可以加快此过程。

一种更快的方法是将其编写为矩阵乘法,但为了编写 X,我认为我必须创建一个 for 循环。

有什么办法可以提高这段代码的速度吗?

【问题讨论】:

    标签: performance matlab for-loop


    【解决方案1】:

    您的 for 循环需要替换为具有 2x2 重复的随机相位矩阵。可以将随机变量创建为大小为A的矩阵

    X = rand(size2/2)*2*pi-pi;
    X = kron(X,ones(2));
    

    然后

    A = A.*X;
    

    【讨论】:

    • 不,我的程序不这样做。我有一个矩阵 size2 x size2 ,其中从 (1,1) 角开始的 square gran x gran 中的每个单元格都具有相同的随机相位
    • 我把gran 误认为是A 的大小...编辑了答案...您所做的就是给A 的每个元素一个随机相位
    • 不,看看我的程序。我没有为矩阵的每个元素提供随机相位,而是为矩阵的每个大小为 gra x gran 的正方形
    • 我明白了...有几种方法可以解决这个问题,我将编辑我的答案...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多