我在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。
谢谢。
[result, z] = min(abs(R - setxor(B, 1:numel(A))))
在您的情况下,这将产生z = 2
和result = A(2) = 3
。
如果我理解正确,您可以先进行排除操作,找到不在B中的索引,即excl = A(setxor(B,1:length(A)))
。然后很容易像这样得到最小值excl(min(abs(R-excl)))
。
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
感谢你的想法。