7

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

例子:

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;

谢谢

4

3 回答 3

6

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

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

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

于 2012-11-05T08:25:51.290 回答
2

如果我理解正确,您可以先进行排除,以找到不在 B 中的索引,即excl = A(setxor(B,1:length(A))). 然后很容易得到这样的最小值excl(min(abs(R-excl)))

于 2012-11-05T08:25:58.870 回答
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 

谢谢你的想法。

于 2012-11-05T12:59:55.907 回答