我有一个整数数组
mypos = np.array([10, 20, 30, 40, 50])
和start &结束位置,像这样:
mydelims = [[5, 12],
[15,31],
[12,16],
[22,69]]
我想遍历mydelims
并计算每对中有多少个位置。本能地,我会这样写:
for mypair in mydelims:
print(sum(mypos>mypair[0] & mypos<mypair[1]))
然而,python似乎无法处理这个问题。我知道mypos>42
将返回一个布尔值数组,但是对一个整数数组应用多次比较的最有效方法是什么?
你很接近,正在寻找np.logical_and
:
import numpy as np
mypos = np.array([10, 20, 30, 40, 50])
mydelims = [[5, 12],
[15, 31],
[12, 16],
[22, 69]]
result = {
tuple(mypair): sum(np.logical_and(mypos > mypair[0], mypos < mypair[1]))
for mypair in mydelims
}
print(result)
输出:
{(5, 12): 1, (15, 31): 2, (12, 16): 0, (22, 69): 3}
请注意,您将分隔符视为不包含的—我认为这是故意的。即5
和12
都不属于[5, 12]
。