# -*- coding: utf-8 -*- import numpy as np def euclid_distance(x1, x2): """计算欧几里得距离 参数: x1 - numpy数组 x2 - numpy数组 返回值: distance - 浮点数,欧几里得距离 """ distance = 0 # 请在此添加实现代码 # #********** Begin *********# distance = np.sqrt(np.sum(np.square(x1-x2))) #********** End ***********# return distance
时间: 2025-06-05 17:33:18 浏览: 9
### 使用 NumPy 计算两个数组之间的欧几里得距离
计算两个 NumPy 数组之间的欧几里得距离可以通过多种方式实现。以下是几种常见的方法:
#### 方法一:使用平方和的开方公式
通过手动计算平方差的和并取平方根,可以得到两个数组之间的欧几里得距离。这种方法直观且易于理解。
```python
import numpy as np
def euclid_distance(x1, x2):
"""计算欧几里得距离"""
distance = np.sqrt(np.sum((x1 - x2) ** 2)) # 计算平方差的和并取平方根
return distance
```
此方法适用于两个相同维度的数组[^1]。
#### 方法二:使用 `np.linalg.norm`
NumPy 提供了内置函数 `np.linalg.norm`,可以直接用于计算向量或矩阵的范数。在二维空间中,L2 范数等价于欧几里得距离。
```python
import numpy as np
def euclid_distance_norm(x1, x2):
"""使用 np.linalg.norm 计算欧几里得距离"""
distance = np.linalg.norm(x1 - x2) # 计算 L2 范数
return distance
```
这种方法更为简洁,并且性能较好[^5]。
#### 方法三:广播机制计算多点间的距离矩阵
如果需要计算多个点之间的两两欧几里得距离,可以利用 NumPy 的广播机制。以下代码展示了如何生成一个距离矩阵:
```python
import numpy as np
def euclidean_distance_matrix(A, B):
"""计算两个数组中所有点之间的欧式距离矩阵"""
distance_matrix = np.sqrt(np.sum((A[:, np.newaxis, :] - B[np.newaxis, :, :]) ** 2, axis=-1))
return distance_matrix
```
此方法适合处理大规模数据集,但需要注意其时间复杂度较高[^3]。
### 示例代码
以下是一个完整的示例,展示如何使用上述方法计算两个 NumPy 数组之间的欧几里得距离:
```python
import numpy as np
# 定义两个数组
x1 = np.array([1, 2, 3])
x2 = np.array([4, 5, 6])
# 方法一
distance1 = np.sqrt(np.sum((x1 - x2) ** 2))
print(f"方法一结果: {distance1}") # 输出: 方法一结果: 5.196152422706632
# 方法二
distance2 = np.linalg.norm(x1 - x2)
print(f"方法二结果: {distance2}") # 输出: 方法二结果: 5.196152422706632
# 如果需要计算多点间距离矩阵
A = np.random.rand(3, 2) # 3 个 2维点
B = np.random.rand(4, 2) # 4 个 2维点
distance_matrix = np.sqrt(np.sum((A[:, np.newaxis, :] - B[np.newaxis, :, :]) ** 2, axis=-1))
print("距离矩阵:")
print(distance_matrix)
```
### 注意事项
- 确保输入的两个数组具有相同的维度,否则会引发形状不匹配的错误。
- 对于大规模数据集,广播机制可能会消耗大量内存,需谨慎使用。
阅读全文
相关推荐















