根据另一个数组的值引用数组的值

时间:2019-09-12 23:01:30

标签: matlab

我有一个数组d = [0,1000,2000]。基于此数组,我计算另一个数组的值,假设J = [0,5000,8000],其中J = 3 * d + 2000。 现在,在使用for循环的迭代过程中,如果d = 0,我想提取J(1)的值;如果d = 1000,那么我想提取J(1)和J(2)的值;如果d = 2000,我想提取J(1),J(2)和J(3)的值。交叉引用两个数组的值的通用方法是什么?

1 个答案:

答案 0 :(得分:0)

假设您在d中的值是唯一的,并且dJ的长度相同,请使用MATLAB的find函数,尤其是将this版本与n = 1direction = 'first',如下所示:

idx = find(d == ii, 1, 'first')

此处,ii是所需的值,例如01000,依此类推。您将在d中获得所需值的(第一次)出现的索引。然后,只需从J1的{​​{1}}中提取所有值:

idx

这是一个小的测试脚本:

J(1:idx)

然后,输出看起来像这样:

d = [0, 1000, 2000]
J = 3 * d + 2000

% If your counter variable only contains valid values from d
for ii = d
  idx = find(d == ii, 1, 'first');
  printf('d = %d\n', ii);
  printf('Extracted values are: ');
  printf('%d ', J(1:idx));
  printf('\n \n');  
end

% If your counter variable may contain any value
for ii = 0:2000
  idx = find(d == ii, 1, 'first');
  if (~isempty(idx))
    printf('d = %d\n', ii);
    printf('Extracted values are: ');
    printf('%d ', J(1:idx));
    printf('\n \n');  
  end
end

希望有帮助!

P.S。由于问题指出,在这里我没有考虑过矢量化,无论如何都使用for循环。