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

如何使用复合条件生成的布尔数组对numpy数组进行过滤?

问题解决方法

你遇到的结果不符合预期的核心原因是:Python原生的and/or/not是用于布尔标量运算的逻辑运算符,无法对Numpy布尔数组做逐元素的逻辑判断。

正确写法

改用Numpy专属的逐元素逻辑运算符,且每个独立判断条件必须用小括号包裹,避免因运算符优先级问题得到错误结果:

  • 多条件同时满足:用&代替and
  • 满足任意一个条件:用|代替or
  • 取反条件:用~代替not

针对你给出的示例,修改后的代码如下:

import numpy as np

verts = np.array([[1,2,3],
                  [4,5,6],
                  [7,8,9],])
# 每个条件加括号,用&做逐元素逻辑与
# 若要包含等于3的条目,将>改为>=即可匹配你给出的预期输出
cond = (verts[:,2] >= 3) & (verts[:,2] < 7)
upper = verts[cond]

运行后得到的upper结果为:

array([[1, 2, 3],
       [4, 5, 6]])

你最开始提到的双重条件代码也对应修改为:

cond_upper = (verts[:,2] < L/2) & (verts[:,2] < 40.0)
upper = verts[cond_upper]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:24:00