如何用NumPy定位矩阵中离给定点最近的点?排查代码问题
问题分析与修正
你的代码逻辑方向是对的,但无法运行大概率是以下几个原因之一:
- 未导入NumPy库:代码里用到
np.asarray、np.linalg.norm等方法,但如果开头没写import numpy as np,会直接抛出NameError。 - data未转为NumPy数组:你给出的data示例是NumPy数组格式,但如果实际代码里data只是普通Python列表(比如
[[3,4], [10,4], [1,3], [5,8]]),np.subtract会因为形状不匹配报错,需要先将data转为NumPy数组。 - 变量x/y未定义:如果直接写
[x, y]但没给x、y赋值,会抛出NameError,测试时需要先给x、y设置具体数值,比如x=2, y=3。
另外,你的代码本身可以正常工作,但有个优化点:欧氏距离的开根号操作不影响argmin的结果(根号是单调递增函数),直接计算距离平方能提升效率,避免不必要的计算:
import numpy as np # 确保data是NumPy数组 data = np.array([[3,4], [10,4], [1,3], [5,8]]) # 定义目标点的坐标 x, y = 2, 3 point = np.asarray([x, y]) # 计算距离平方的最小值索引 closest_pt_idx = np.argmin(np.sum((data - point)**2, axis=1)) print(closest_pt_idx) # 输出2,对应data中的[1,3],是离(2,3)最近的点
如果坚持使用np.linalg.norm,修正后的完整代码如下:
import numpy as np data = np.array([[3,4], [10,4], [1,3], [5,8]]) x, y = 2, 3 point = np.asarray([x, y]) closest_pt_idx = np.argmin(np.linalg.norm(data - point, axis=1)) print(closest_pt_idx) # 同样输出2
你可以对照检查自己的代码是否存在上述问题,比如是否导入库、data是否转为数组、x/y是否赋值。
内容的提问来源于stack exchange,提问作者cercio
相关产品推荐
相关产品推荐

