如何在Matlab中找到指定索引的最近索引

时间:2012-11-05 08:06:12

标签: arrays matlab vector indexing

我在MATLAB,A和B中有两个向量.B包含一些索引(1到结束)。我有一个随机索引R(在矢量索引的范围内)。我想编写一个函数(或语句)来选择A [z],其中z是R中最近的数字(即索引),不包含在B中。

示例:

A = [2 3 6 1 9 7 4 5 8]
B = [3 4 5 6 7 8]
R = 5

函数必须返回3,因为最近的索引是2,因为5-2 <9-5和2不在B中,所以A [2] = 3;

由于

3 个答案:

答案 0 :(得分:6)

改善雅各布的答案,这是正确的解决方案:

[result, z] = min(abs(R - setxor(B, 1:numel(A))))

在您的情况下,会产生z = 2result = A(2) = 3

答案 1 :(得分:2)

如果我理解正确,你可以先进行排除,找到不在B中的指数,即excl = A(setxor(B,1:length(A)))。然后很容易得到这样的分钟excl(min(abs(R-excl)))

答案 2 :(得分:0)

请注意,setdiff和setxor函数会对结果进行排序。

tmpSet = R - setdiff(1:numel(A),B);
[~,z] = min(abs(tmpSet));
z = tmpSet(z);
Result = A(R-z);

问题中的相同示例:

A = [2 3 6 1 9 7 4 5 8]
B = [3 4 5 6 7 8]
R = 5

tmpSet = 5 - {1 2 9} = {4 3 -4}
z = 2
z = 3
Result = A(5-3) = A(2) = 3 

感谢您的想法。