我有 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);
你也可以避免构造imat
、i1mat
、i2mat
、i3mat
、i4mat
,只做:
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);
所有方法都给出相同的结果。