我有2800x4800矩阵。仅第一列中有数据。我也想在其余各列中添加数据。行中的值应像这样继续:n =(n-1)+ 0.005。我用循环编写了一个代码,它可以工作,但是,它花费的时间太长。我该如何编写而不循环?
for j=2:size(Time,2)
Time(:,j) = Time(:,(j-1)) + (1/(Fs*1000));
end
答案 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版本会很有趣。