Arrays MATLAB:用递增的数字填充数组
我想让一个MATLAB数组以0.001的增量用数字填充一列。我正在处理大约200000000行的数组,因此希望使用最有效的方法。我曾考虑使用以下代码: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中的 如果由于空间限制,这种矢量化不可行
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];
公认的答案有两个问题
我想在你的情况下情况会更糟。
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