L1距离和L2距离Matlab代码实现

1、L1距离(也就是曼哈顿距离Manhattan Distance

这个相对简单点,简要的说就是求点的绝对值

例如下图所示:就是对应位置元素相减然后取绝对值操作!

L1距离和L2距离Matlab代码实现_第1张图片

 L1距离计算公式如下:

 

L1距离和L2距离Matlab代码实现_第2张图片

简单的python代码实现

 

import numpy as np
for i in range(num_test):
	a = X_test[i]-X_train[j]
	b = np.fabs(a)
	dists[i][j] = np.sum(b)

matlab代码实现:

function KMatrix = getL1( X, Y ) %L1距离

m = size(X,1);  n = size(Y,1);

KMatrix = zeros(m,n);

Cell = arrayfun(@(i) getL1Vec(X(i,:), Y, i), 1:m, 'UniformOutput', false);%只能得到Cells

for i = 1: m %Cells->矩阵,极快

   KMatrix(i,:) = Cell{i};

end
---------------------------------------------------
function KVec = getL1Vec(XVec, Y, i)%第i行L1

   KVec = sum( abs(bsxfun(@minus,XVec,Y)),2 );

   fprintf('%d.', i);if mod(i,10)==0, fprintf('\n'); end

end

2、L 2距离(就是欧氏距离)

就是两个两个点相减的平方和再开根号

L1距离和L2距离Matlab代码实现_第3张图片

python 代码实现,便于理解

import numpy as np
for i in range(num_test):
      for j in range(num_train):
        a = X_test[i]-X_train[j]
        b = np.square(a)
        c = np.sum(b)
        dists[i][j] = np.sqrt(c)

matlab代码实现

%欧几里得距%欧式距离
function dist = distance_func(a, b)
% norm 2 distance
dist1 = sum((a-b).^2);
dist = sqrt(dist1);
end

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(matlab-CV)