如何在 MATLAB 中的 for 循环中按顺序访问数组元素?



我有 5 个数据集:

data1=rand(1,1000)
data2=rand(1,1000)
data3=rand(1,1000)
data4=rand(1,1000)
data5=rand(1,1000)

我必须按顺序和非重复的方式选择值。

我的全部诗意是 i=1,

Result1(index1) = data1(index1)+data1(2)
Result2(index1) =  data2(index1)+data2(index2)
result3(index1) = data1(index3)+data2(index1)+data3(index1)
result4(index1) = data1(index4)+data3(index2)

我想在 i=200 的情况下继续这个过程,其中数组索引应该是顺序的。 像下面这样:

Result1(index2) = data1(index5)+data1(6)
Result2(index2) = data2(index3)+data2(index4)
result3(index2) = data1(index7)+data2(index3)+data3(index3)
result4(index2) = data1(index8)+data3(index4)

感谢您的时间和考虑。

方法 1:使用 FOR 循环(慢速(

data1=rand(1,1000);
data2=rand(1,1000);
data3=rand(1,1000);
data4=rand(1,1000); % ! not used
data5=rand(1,1000); % ! not used
% Preallocation of memory for better performance
result1 = zeros(1,200);
result2 = zeros(1,200);
result3 = zeros(1,200);
result4 = zeros(1,200);
% Main loop
for i=1:200
i1 = (i-1)*4+1; % takes values 1, 5,  9, 13,...
i2 = (i-1)*4+2; % takes values 2, 6, 10, 14,...
i3 = (i-1)*4+3; % takes values 3, 7, 11, 15,...
i4 = (i-1)*4+4; % takes values 4, 8, 12, 16,...
result1(i) = data1(i1)+data1(i2);
result2(i) = data2(i1)+data2(i2);
result3(i) = data1(i3)+data2(i1)+data3(i1);
result4(i) = data1(i4)+data3(i2);
end

方法 2:使用矩阵索引操作(快速(

imat = 1:200;
i1mat = 4*(imat-1)+1;
i2mat = 4*(imat-1)+2;
i3mat = 4*(imat-1)+3;
i4mat = 4*(imat-1)+4;
result1 = data1(i1mat)+data1(i2mat);
result2 = data2(i1mat)+data2(i2mat);
result3 = data1(i3mat)+data2(i1mat)+data3(i1mat);
result4 = data1(i4mat)+data3(i2mat);

你也可以避免构造imati1mati2mati3mati4mat,只做:

result1 = data1(1:4:800)+data1(2:4:800);
result2 = data2(1:4:800)+data2(2:4:800);
result3 = data1(3:4:800)+data2(1:4:800)+data3(1:4:800);
result4 = data1(4:4:800)+data3(2:4:800);

所有方法都给出相同的结果。

最新更新