Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/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
Arrays MATLAB:用递增的数字填充数组_Arrays_Matlab - Fatal编程技术网

Arrays MATLAB:用递增的数字填充数组

Arrays MATLAB:用递增的数字填充数组,arrays,matlab,Arrays,Matlab,我想让一个MATLAB数组以0.001的增量用数字填充一列。我正在处理大约200000000行的数组,因此希望使用最有效的方法。我曾考虑使用以下代码: for i = 1 : size(array,1) array(i,1) = i * 0.001; end 必须有一种更有效的方法来做到这一点 array(:,1) = [1:size(array,1)]' * 0.001; 当对循环进行矢量化时,Matlab效率更高,另请参见mathworks中的 如果由于空间限制,这种矢量化不可行

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

for i = 1 : size(array,1)
    array(i,1) = i * 0.001;
end
必须有一种更有效的方法来做到这一点

array(:,1) = [1:size(array,1)]' * 0.001;
当对循环进行矢量化时,Matlab效率更高,另请参见mathworks中的

如果由于空间限制,这种矢量化不可行,您可能需要重新考虑使用函数在C中重写for循环

size=20000000;%大小已定义


数组(1:size,1)=(1:size)*0.001

公认的答案非常接近于快速,但不够快。你应使用:

s=size(array,1);
step=0.0001;
array(:,1)=[step:step:s*step];
公认的答案有两个问题

  • 你不需要换位
  • 应该将步长包含在向量中,而不是相乘
  • 这里是一个比较(对不起,我运行的是32位matlab)

    结果是:

    运行时间为3.469108秒

    运行时间为5.304436秒

    在第二个例子中没有转置

    运行时间为3.524345秒


    我想在你的情况下情况会更糟。

    array(:,1)
    意味着
    array(1:size,1)
    +1可以正确使用
    start:step:end
    语法来处理等距列表。@catchmeifyoutry+1对于你的昵称:DAs g24l指出,不需要转置,甚至会对性能产生负面影响。我错误地认为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