【问题标题】:vectorizing for loop that does a sum对求和的循环进行矢量化
【发布时间】:2011-06-09 16:58:26
【问题描述】:

大家好

如何将这个 for 循环向量化?

t_rebuilt=linspace(0,1,length(inner_freq));

for ii=1:1:length(inner_freq)-1;ii=ii+1; 

    aa_sig_rebuilt=inner_freq(ii,2)*cos(2*pi*t_rebuilt*inner_freq(ii,1)+inner_freq(ii,3));
    aa_sig_combined=aa_sig_combined+aa_sig_rebuilt;

end;

我尝试用下面的线替换它,看看它是否有效,但我只是得到一条直线

aa_sig_rebuilt=inner_freq(ii,2).*cos(2*pi*t_rebuilt*inner_freq(ii,1)+inner_freq(ii,3));

【问题讨论】:

    标签: matlab for-loop vectorization


    【解决方案1】:

    t_rebuilt 似乎是一个 1×N 的时间点向量,您希望在该时间点评估一组三角函数,参数在 M×3 矩阵 inner_freq 的行中定义。然后,您想将所有这些结果添加到单个组合信号中。您可以在没有 for 循环的情况下执行此操作,如下所示:

    temp = 2*pi*inner_freq(:,1)*t_rebuilt;  %# This matrix multiplication will
                                            %#   result in an M-by-N matrix
    temp = temp+repmat(inner_freq(:,3),1,numel(t_rebuilt));  %# Replicate and add
                                                             %#   column 3
    aa_sig_combined = inner_freq(:,2).'*cos(temp);  %'# Gives you your 1-by-N
                                                     %#   combined signal
    

    然后您可以按如下方式绘制结果:

    plot(t_rebuilt,aa_sig_combined);
    

    【讨论】:

      【解决方案2】:

      试试这个

      sum(aa_sig_rebuilt=inner_freq(:,2).*cos(2*pi*t_rebuilt*inner_freq(:,1)+inner_freq(:,3)));
      

      【讨论】:

      • t_rebuilt=linspace(0,1,length(inner_freq));所以这是我绘制的另一个数组,并且该图以直线形式返回
      猜你喜欢
      • 2013-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-07
      • 1970-01-01
      • 1970-01-01
      • 2017-09-26
      相关资源
      最近更新 更多