我有一个数组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)的值。交叉引用两个数组的值的通用方法是什么?
答案 0 :(得分:0)
假设您在d
中的值是唯一的,并且d
和J
的长度相同,请使用MATLAB的find
函数,尤其是将this版本与n = 1
和direction = 'first'
,如下所示:
idx = find(d == ii, 1, 'first')
此处,ii
是所需的值,例如0
,1000
,依此类推。您将在d
中获得所需值的(第一次)出现的索引。然后,只需从J
到1
的{{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循环。