求助:如何用Python从坐标数组中筛选符合指定范围的点
筛选指定范围内的坐标点数组
方法一:使用NumPy(推荐,适合数组批量操作)
假设你的原始坐标数组是coords,格式为每行存储一个点的(x,y),形状是(n, 2)(比如coords = np.array([[0.5,0.3], [-0.2,0.8], ...])),可以用布尔索引快速筛选:
import numpy as np # 示例原始坐标数组 coords = np.array([[0.5, 0.3], [-0.2, 0.8], [1.2, 0.5], [0.7, 1.3], [0.2, 0.9]]) # 分别生成x、y的范围条件,再合并为总条件 x_valid = (coords[:, 0] >= -0.1) & (coords[:, 0] <= 1.1) y_valid = (coords[:, 1] >= -0.1) & (coords[:, 1] <= 1.1) valid_points = x_valid & y_valid # 筛选出符合条件的坐标 filtered_coords = coords[valid_points] print(filtered_coords)
说明:coords[:,0]取所有点的x坐标,coords[:,1]取y坐标,&表示逻辑“且”,最后用条件数组直接索引原数组即可得到结果,比循环效率高得多。
方法二:纯Python列表(无需NumPy)
如果你的原始数据是普通列表(比如coords = [[x1,y1], [x2,y2], ...]),用列表推导式更简洁:
# 示例原始坐标列表 coords = [[0.5, 0.3], [-0.2, 0.8], [1.2, 0.5], [0.7, 1.3], [0.2, 0.9]] # 遍历每个点,保留符合条件的点 filtered_coords = [ point for point in coords if (-0.1 <= point[0] <= 1.1) and (-0.1 <= point[1] <= 1.1) ] print(filtered_coords)
你之前代码的几个问题
- 语法错误:
np.array[: , 1]写法不对,应该是具体数组变量(比如coords[:,1]),不能直接对np.array类切片 - NumPy数组不适合用
append循环添加元素,效率极低,且语法错误(NumPy的append是np.append(),不是数组对象的方法) - 循环语法错误:
for vor.vertices in coords不符合Python变量命名规则,循环变量需为普通名称(比如for point in coords) - 变量大小写混乱:比如
J[1]和j[1]是两个不同变量,会导致未定义报错
内容的提问来源于stack exchange,提问作者Ma_TT_ia
相关产品推荐
相关产品推荐

