我正在编写一个函数来查找矩阵中最接近给定向量的行,并且给定向量的大小可以变化。例如,如果矩阵大小为4且向量大小为3,则函数将检查矩阵的每一行的前三个值。
为了比较,我正在计算矩阵中每一行与给定矢量的距离,然后选择具有最小距离的行,但我认为这不是完美的解决方案,因为两个不同的行可以与给定矢量具有相同的最小距离。 / p>
我想知道matlab中是否有内置函数可用。我已经尝试过方法ismember
。
答案 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