A = [1 3 5 8]
B = [1 2 3 4 5 6 7 8]
我想创建一个向量C
,它返回向量中元素的行号,与向量A
中的每个元素具有最小的非负差B
。
所以,给定上面的例子,它应该返回:
C = [1 2 2 3 3 4 4 4]
A = [1 3 5 8]
B = [1 2 3 4 5 6 7 8]
我想创建一个向量C
,它返回向量中元素的行号,与向量A
中的每个元素具有最小的非负差B
。
所以,给定上面的例子,它应该返回:
C = [1 2 2 3 3 4 4 4]
我敢肯定有很多方法可以做到这一点。这是一个:
A = [1 3 5 8]
B = [1 2 3 4 5 6 7 8]
%create matrices of the values to subtract
[a,b] = meshgrid(A,B);
%subtract
aLessB = a-b;
%make sure we don't use the negative values
aLessB(aLessB < 0) = Inf;
%sort the subtracted matrix
[dum, idx] = sort(aLessB, 2, 'ascend');
idx(:,1) 是您正在寻找的解决方案。
另一种解决方案:
D = bsxfun(@minus, A', B);
D(D < 0) = Inf;
[~, C] = min(D, [], 1);