如何在Matlab中将矢量映射到另一个矢量中的最近点?

时间:2016-06-16 20:31:12

标签: matlab

假设我有一个长度为a的向量N和另一个向量b = [-3 -1 1 3],是否有任何有效的方法将a的每个元素映射到最近的(欧几里德距离) )b中的元素。我不想使用循环。

1 个答案:

答案 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

你的例子是一维的,所以除了使用距离的绝对值之外,欧几里德距离实际上并不重要。