MATLAB:用数字递增填充数组

Cap*_*rog 2 arrays matlab

我想让一个MATLAB数组填充一个数字,增量为0.001.我正在使用大约200,000,000行的数组,因此希望使用最有效的方法.我考虑过使用以下代码:

for i = 1 : size(array,1)
    array(i,1) = i * 0.001;
end
Run Code Online (Sandbox Code Playgroud)

必须有一种更有效的方法来做这件事.

小智 9

那么接受的答案非常接近于快速但不够快.你应该使用:

s=size(array,1);
step=0.0001;
array(:,1)=[step:step:s*step];
Run Code Online (Sandbox Code Playgroud)

接受的答案有两个问题

  1. 你不需要转置
  2. 你应该在向量中包含步骤,而不是乘法

这是一个比较(抱歉,我正在运行32位matlab)

array=rand(10000);

s=size(array,1);
step=0.0001;
tic
for i=1:100000
array(:,1)=[step:step:s*step];
end
toc
Run Code Online (Sandbox Code Playgroud)

tic
for i=1:100000
array(:, 1)=[1:s]'*step;
end
toc
Run Code Online (Sandbox Code Playgroud)

结果是:

经过的时间是3.469108秒.

经过的时间是5.304436秒.

并且没有在第二个例子中进行转置

经过的时间是3.524345秒.

我认为在你的情况下情况会更糟.

  • +1实际执行性能分析测试:) (2认同)