Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 如何使代码更简单,运行更快_Matlab_Loops_For Loop - Fatal编程技术网

Matlab 如何使代码更简单,运行更快

Matlab 如何使代码更简单,运行更快,matlab,loops,for-loop,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 通过将1:2:size(Time,2)-1行的计算替换为2:2:size(Time,2)(实际上,您可以删除for的,以加快计算速度

我有一个2800x4800矩阵。只有第一列中有数据。我还想在其余的列中添加数据。行中的值应如下所示:n=(n-1)+0.005。我编写了一个带有循环的代码,它可以正常工作,但是,它花费的时间太长了。没有循环,我怎么写这个

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

通过将
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));

通过编写一行代码就可以得到与示例代码相同的结果

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版本将是一件有趣的事情。

这样,从第3列到最后,它用相同的值填充每一列。@fuji_doji您的代码就是这样的。我的代码运行良好,每一行都是前一行加上指定的值。可能。。我看不到代码的结果,因为我的计算机在运行此代码时处于冻结状态。:/它看起来应该可以工作,但我不明白。现在我看到了问题,但没有找到解决方案:/除了开头的第一列之外,我在每一列中都有零。运行代码后,除第二列外,每列的值均为1/(Fs*1000)。(n-1)未替换为以前计算的值,但始终为零。