如何通过掩码修改Python二维数组圆形区域内满足阈值条件的值
你可以在现有圆形区域mask的基础上,叠加数值判断的布尔条件,通过逐元素逻辑与组合两个筛选规则即可实现需求,参考代码如下:
import numpy as np x = np.arange(0, 20) y = np.arange(0, 20) # 此处替换为你提前完成赋值的实际数组 arr = np.random.randint(0, 10, size=(y.size, x.size)) cx = 10. cy = 10. r = 4. # 组合两个筛选条件:1. 位置在圆形区域内 2. 元素数值小于5 mask = ((x[np.newaxis, :] - cx) ** 2 + (y[:, np.newaxis] - cy) ** 2 < r ** 2) & (arr < 5) # 仅对同时满足两个条件的元素赋值,可将1替换为你需要的目标值 arr[mask] = 1
补充说明
- 用
&运算符实现numpy数组的逐元素逻辑与,注意所有单个条件都需要用括号包裹,避免运算符优先级问题导致计算结果异常 - 如需叠加更多判断规则,只需继续用
&拼接对应布尔数组即可,例如筛选圆形区域内数值大于2且小于7的元素可以写为:mask = 圆形区域判断条件 & (arr > 2) & (arr < 7) - 整个实现为numpy向量化操作,无Python层级循环,处理大规模数组时效率更高
内容的提问来源于stack exchange,提问作者Minox
相关产品推荐
相关产品推荐

