1 条题解
-
0
NUMPY052 题解:计算坐标点之间的距离矩阵
题目
给定 个二维坐标点,计算所有点两两之间的距离,输出距离矩阵。
解题思路
- 读取 个点的坐标,存入数组
- 使用公式计算两点间欧几里得距离
- 利用广播一次性计算所有点对距离
代码
import numpy as np n = int(input()) coords = [] for _ in range(n): x, y = map(float, input().split()) coords.append([x, y]) Z = np.array(coords) X = np.atleast_2d(Z[:, 0]) Y = np.atleast_2d(Z[:, 1]) D = np.sqrt((X - X.T)**2 + (Y - Y.T)**2) print(D)代码详解
读取输入
n = int(input()) # 读取点的数量 coords = [] for _ in range(n): x, y = map(float, input().split()) coords.append([x, y]) Z = np.array(coords)计算距离矩阵
X = np.atleast_2d(Z[:, 0]) # 提取所有 x 坐标,转为行向量 Y = np.atleast_2d(Z[:, 1]) # 提取所有 y 坐标,转为行向量关键公式:
X - X.T:每个点 坐标与所有点 坐标的差(广播)Y - Y.T:每个点 坐标与所有点 坐标的差(广播)- \texttt{np.sqrt}:计算欧几里得距离
运行示例
输入:
3 0 0 3 4 6 8分析:
- 点 到 的距离
- 点 到 的距离
- 点 到 的距离
输出:
[[ 0. 5. 10.] [ 5. 0. 5.] [10. 5. 0.]]核心知识点
- \texttt{np.atleast_2d} —— 确保数组至少是 2 维
- \texttt{X.T} —— 矩阵转置
- 广播机制 —— 自动扩展维度进行计算
- \texttt{np.sqrt} —— 计算平方根
- 1
信息
- ID
- 299
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- (无)
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 上传者