```python import numpy as np def minkowski_distance(x, y, p): """ 计算闵可夫斯基距离 参数: x (numpy.ndarray):向量 x y (numpy.ndarray):向量 y p (int):距离的参数 返回: float:闵可夫斯基距离 """ diff = np.abs(x - y) # 计算向量差的绝对值 power = np.power(diff, p) # 对差值的绝对值进行 p 次幂运算 sum_power = np.sum(power) # 求和 distance = np.power(sum_power, 1 / p) # 开 p 次方 return distance # 测试向量 a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) # 计算 p=1,2,3,4 时的距离 for p in [1, 2, 3, 4]: distance = minkowski_distance(a, b, p) print(f"当 p={p} 时,距离为:{distance}") # 对比 p=1,2 时与上述计算结果是否一致 distance_p1 = minkowski_distance(a, b, 1) distance_p2 = minkowski_distance(a, b, 2) if distance_p1 == np.abs(a[0] - b[0]) + np.abs(a[1] - b[1]) + np.abs(a[2] - b[2]): print("p=1 时,计算结果一致") else: print("p=1 时,计算结果不一致") if distance_p2 == np.sqrt((a[0] - b[0])**2 + (a[1] - b[1])**2 + (a[2] - b[2])**2): print("p=2 时,计算结果一致") else: print("p=2 时,计算结果不一致") ``` 额外需要注意的逻辑点: 1. 要确保输入的向量 x 和 y 维度相同,否则计算会出错。 2. 对于不同的 p 值,可能会出现数值精度的问题,需要注意处理。 3. 在对比计算结果时,要考虑到数值的近似相等情况,而不是严格的相等。 [2024-11-19 22:44:44 | AI写代码神器 | 537点数解答]