You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何用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)

你之前代码的几个问题

  1. 语法错误:np.array[: , 1]写法不对,应该是具体数组变量(比如coords[:,1]),不能直接对np.array类切片
  2. NumPy数组不适合用append循环添加元素,效率极低,且语法错误(NumPy的append是np.append(),不是数组对象的方法)
  3. 循环语法错误:for vor.vertices in coords不符合Python变量命名规则,循环变量需为普通名称(比如for point in coords)
  4. 变量大小写混乱:比如J[1]和j[1]是两个不同变量,会导致未定义报错

内容的提问来源于stack exchange,提问作者Ma_TT_ia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 04:10:32