如何在不使用linalg.norm的情况下计算两个向量之间的距离?



如何使用欧几里得距离公式计算 2 个向量之间的距离,但不使用linalg.norm

这是我编写的代码,它有效。如何在不使用linalg.norm的情况下获得相同的效果?

import numpy as np
def distance(arr1,arr2):    
dist = np.linalg.norm(arr1 - arr2)
return dist

使用numpy.linalg.norm更容易,因为您依赖于已经编写的函数。

练习的目的是提高您的编程和数学知识。

从欧几里得距离公式开始,并编写一个函数来执行计算中必要的每个步骤。

# Calculate the Euclidean distance between two points (P and Q)
def calculate_Euclidean_distance(point_P_list, point_Q_list):
log.debug('Enter calculate_Euclidean_distance')
log.info('point_P_list: (%s)' % ', '.join(map(str, point_P_list)))
log.info('point_Q_list: (%s)' % ', '.join(map(str, point_Q_list)))
# Store the sum of squared distances between coordinates
sum_of_coordinate_distance_squared = 0
# For each coordinate p and q in the points P and Q square the difference
for p, q in zip(point_P_list, point_Q_list):
distance_pq_squared = (p - q) ** 2
sum_of_coordinate_distance_squared += distance_pq_squared
# The distance between points P and Q is the square root of the sum of coordinate differences squared
distance_PQ = math.sqrt(sum_of_coordinate_distance_squared)
log.info('distance_PQ: ' + str(distance_PQ))
[2019-09-27 15:03:33,257] [main] Start example.py execution
[2019-09-27 15:03:33,259] [calculate_Euclidean_distance] Enter calculate_Euclidean_distance
[2019-09-27 15:03:33,260] [calculate_Euclidean_distance] point_P_list: (9, 20)
[2019-09-27 15:03:33,261] [calculate_Euclidean_distance] point_Q_list: (18, 8)
[2019-09-27 15:03:33,261] [calculate_Euclidean_distance] distance_PQ: 15.0
[2019-09-27 15:03:33,261] [main] End example.py execution

解决方案:

import numpy as np
def distance(arr1,arr2):    
dist = np.sqrt(sum([(i-j)**2 for i,j in zip(arr1,arr2)]))
return dist

最新更新