如何使此代码更容易运行

时间:2019-01-08 09:19:13

标签: matlab loops for-loop

我有2800x4800矩阵。仅第一列中有数据。我也想在其余各列中添加数据。行中的值应像这样继续:n =(n-1)+ 0.005。我用循环编写了一个代码,它可以工作,但是,它花费的时间太长。我该如何编写而不循环?

for j=2:size(Time,2)
    Time(:,j) = Time(:,(j-1)) + (1/(Fs*1000));
end

2 个答案:

答案 0 :(得分:2)

通过将1:2:size(Time,2)-1的行的计算替换为2:2:size(Time,2)的行,可能类似于以下内容(实际上,您可以删除for以加快速度)。请注意,我们假设Fs在这里是常量:

m = size(Time,2);
Time(:,2:m)= Time(:,1:(m-1))+(1/(Fs*1000));

答案 1 :(得分:0)

通过编写,只需一行即可获得与示例代码相同的结果

Time(:,2:end) = bsxfun(@plus,Time(:,1), (1/(Fs*1000)) .* (1:size(Time,2)-1));

如果您有Matlab的较新版本(> = r2016b),则可以使用Matlab的隐式扩展,只需编写

Time(:,2:end) = Time(:,1) + (1/(Fs*1000)) .* (1:size(Time,2)-1);

但是至少在我的计算机上,使用此向量化而不是循环不会真正提高性能。随着时间的推移,JIT编译已经变得越来越好,因此了解您使用的Matlab版本会很有趣。