如何在Matlab

时间:2015-05-12 13:57:05

标签: arrays matlab matrix

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

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

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

1 个答案:

答案 0 :(得分:4)

您可以使用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

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

根据您对距离的定义,您可以使用bsxfun代替pdist2。例如,对于(平方)欧几里德距离,

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