我想让一个MATLAB数组填充一个数字,增量为0.001。我正在使用大约200,000,000行的数组,因此希望使用最有效的方法。我考虑过使用以下代码:
for i = 1 : size(array,1)
array(i,1) = i * 0.001;
end
必须有一种更有效的方法来做这件事。?
答案 0 :(得分:9)
接受的答案非常接近于快速但不够快。你应该使用:
s=size(array,1);
step=0.0001;
array(:,1)=[step:step:s*step];
接受的答案有两个问题
这是一个比较(对不起,我正在运行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
和
tic
for i=1:100000
array(:, 1)=[1:s]'*step;
end
toc
结果是:
经过的时间是3.469108秒。
经过的时间是5.304436秒。
并且没有在第二个例子中进行转置
经过的时间是3.524345秒。
我认为在你的情况下情况会更糟。
答案 1 :(得分:3)
array(:,1) = [1:size(array,1)]' * 0.001;
在向量化循环时,Matlab更有效,另请参阅mathworks中的performance tips。
如果由于空间限制而导致此类矢量化不可行,您可能需要重新考虑使用MEX函数在C中重写for循环。
答案 2 :(得分:1)
你也可以试试这个
size=20000000;%size is defined
array(1:size,1)=(1:size)*0.001