【问题标题】:How to find a row in matrix containing closest values to given vector in Matlab如何在Matlab中找到包含与给定向量最接近的值的矩阵行
【发布时间】:2015-07-23 10:58:46
【问题描述】:

我正在编写一个函数来查找矩阵中最接近给定向量的行,并且给定向量的大小可以是可变的。例如,如果矩阵大小为 4,向量大小为 3,则函数将检查矩阵每一行的前三个值。

为了比较,我正在计算矩阵中每一行与给定向量的距离,然后选择具有最小距离的行,但我认为这不是完美的解决方案,因为两个不同的行可以与给定向量具有相同的最小距离。

我想知道matlab中是否有任何内置函数。我已经尝试过方法ismember

【问题讨论】:

  • 发布您已有的代码以及输入和所需输出的数字示例。
  • 您要问的是一个概念问题,而不是实施问题。无论您使用什么函数/方法,如果矩阵的两行与向量等距,则必须清楚输出。
  • 你对距离的定义是什么?
  • 我很抱歉指定距离。我正在使用欧几里得距离进行计算

标签: arrays matlab matrix


【解决方案1】:

您可以使用pdist2 计算距离,获取最小值,然后找到所有具有最小距离的行:

vector = [1 3 2];
matrix = [2 1 2 2
          1 3 3 4
          0 0 0 0
          5 4 3 2];                                             %// example data
dist = pdist2(vector, matrix(:,1:numel(vector)), 'euclidean');  %// compute distances
mindist = min(dist);                                            %// minimum distance
result = find(dist==mindist);                                   %// minimizing rows

pdist2 中的'euclidean' 更改为使用其他距离定义。


根据您对距离的定义,您可以使用bsxfun 而不是pdist2。例如,对于(平方)欧几里得距离,

dist = sum(bsxfun(@minus, vector, matrix(:,1:numel(vector))).^2, 2); %// squared distance

【讨论】:

  • 不错 :) 不知道 pdist2 可以直接与矩阵一起使用。正在考虑mat2cellcellfun +1
  • @SanthanSalai 谢谢!是的,pdist2 主要用于矩阵。每行代表一个“点”
  • 谢谢。我没有任何工具箱,所以我无法遵循上述程序。但是,我使用 for 循环做几乎相同的事情
  • @User1551892 查看编辑,bsxfun。你的距离定义是什么?欧几里得?
  • sqrt ((matrix(1,1) -vector(1))^2 +(matrix(1,2) -vector(2))^2+(matrix(1,3) -向量(3))^2)
猜你喜欢
  • 2012-05-25
  • 2019-02-21
  • 1970-01-01
  • 2013-04-29
  • 1970-01-01
  • 2017-10-05
  • 1970-01-01
相关资源
最近更新 更多