MATLAB:用数字递增填充数组

时间:2012-03-19 10:57:00

标签: arrays matlab

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

for i = 1 : size(array,1)
    array(i,1) = i * 0.001;
end

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

3 个答案:

答案 0 :(得分:9)

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

s=size(array,1);
step=0.0001;
array(:,1)=[step:step:s*step];

接受的答案有两个问题

  1. 您不需要转置
  2. 您应该在向量中包含步骤,而不是乘以
  3. 这是一个比较(对不起,我正在运行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