假设我有一个长度为a
的向量N
和另一个向量b = [-3 -1 1 3]
,是否有任何有效的方法将a
的每个元素映射到最近的(欧几里德距离) )b
中的元素。我不想使用循环。
答案 0 :(得分:2)
您可以使用bsxfun
来计算两个向量中每个元素之间的差异。这将返回numel(a) x numel(b)
差异矩阵。然后我们可以取绝对值并找到a
中每个元素出现最小差异的列(使用min
的第二个输出)。如果您想要b
中与a
中每个元素最接近的min
的实际值,则可以使用b
的第二个输出来索引a = linspace(-3, 3, 8);
b = [-3 -1 1 3];
[~, closest] = min(abs(bsxfun(@minus, a(:), b(:).')), [], 2);
% 1 1 2 2 3 3 4 4
b_for_each_a = b(closest);
% -3 -3 -1 -1 1 1 3 3
1}}。
For i = 1 To 17381
If IsError(Application.Match(cells(i, 1).Value, codeArr, False)) Then
ReDim Preserve codeArr(count)
codeArr(count) = cells(i, 1)
count = count + 1
End If
Next i
你的例子是一维的,所以除了使用距离的绝对值之外,欧几里德距离实际上并不重要。