【问题标题】:How to access array element sequentially in for loop in MATLAB?如何在MATLAB的for循环中顺序访问数组元素?
【发布时间】:2020-10-24 21:19:07
【问题描述】:

我有 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)

感谢您的时间和考虑。

【问题讨论】:

  • 什么是index1index2 等等?它们与i 有什么关系?请澄清您的问题。

标签: arrays matlab indexing


【解决方案1】:

方法 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:使用 MATRIX 索引操作 (FAST)

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);

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

【讨论】:

  • 非常感谢您的时间和考虑。
猜你喜欢
  • 2020-04-14
  • 2010-09-21
  • 2020-08-24
  • 2016-02-12
  • 2016-03-24
相关资源
最近更新 更多