0
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]     
4

2 回答 2

1

我敢肯定有很多方法可以做到这一点。这是一个:

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) 是您正在寻找的解决方案。

于 2013-07-30T19:59:38.453 回答
1

另一种解决方案:

 D = bsxfun(@minus, A', B);
 D(D < 0) = Inf;
 [~, C] = min(D, [], 1);
于 2013-07-31T22:33:26.003 回答