如何判断numpy数组元素是否落在2列numpy数组区间且无需for循环
无循环实现方案
核心利用numpy的广播机制,一行代码即可完成计算:
result = (b[:, None, 0] <= a) & (a <= b[:, None, 1])
代码验证
用你给出的示例测试完整代码如下:
import numpy as np a = np.array([10, 2, 5]) b = np.array([[ 0, 5],[ 5, 10]]) result = (b[:, None, 0] <= a) & (a <= b[:, None, 1]) print(result) # 输出: # [[False True True] # [ True False True]]
原理解释
- 我们给
b[:,0](形状为(M,))和b[:,1](形状为(M,))各新增一个维度,变成形状(M,1) - 一维数组
a的形状为(N,),和(M,1)的数组做比较运算时,会触发numpy广播机制,自动扩展为(M,N)的形状逐元素计算 - 两个布尔数组做按位与运算,就得到每个位置的区间判断结果
内容的提问来源于stack exchange,提问作者Andrex
相关产品推荐
相关产品推荐

