Python 检查数组的元素是否在边界内
我有两个数组。一个用于下限和上限,一个用于我测量的信号。现在,我想知道我所有的信号是否都在上下限之内Python 检查数组的元素是否在边界内,python,performance,Python,Performance,我有两个数组。一个用于下限和上限,一个用于我测量的信号。现在,我想知道我所有的信号是否都在上下限之内 x = np.random.normal(size=(10,)) # here, 10 signals b = np.random.normal(size=(10, 2)) # lower and upper bound for each signal 目前,我执行以下操作来检查我的信号是否在其范围内: (b[:,0] < x) & (x < b[:,1]) (b
x = np.random.normal(size=(10,)) # here, 10 signals
b = np.random.normal(size=(10, 2)) # lower and upper bound for each signal
目前,我执行以下操作来检查我的信号是否在其范围内:
(b[:,0] < x) & (x < b[:,1])
(b[:,0]
有没有更快的方法来实现这一点?您当前的速度是:
>>> a = lambda: (b[:,0] < x) & (x < b[:,1])
>>> timeit(a, number=100000)
0.40337433700000247
然后你剃掉约45%:
>>> q = lambda: (b[0] < x) & (x < b[1])
>>> timeit(q, number=100000)
0.22948266800000283
q=lambda:(b[0]不错!你能解释一下为什么重塑有这么大的影响吗?我认为这是因为“简单索引”方法比“高级索引”方法更快。不幸的是,我找不到numpy索引的实际代码,所以我无法确认这一点。这是由于元素在内存中的存储方式。第一种解决方案执行跨步内存访问,而第二种解决方案执行连续内存访问。跨步内存访问速度较慢(尤其是阵列较大时)。这是由于硬件本身,而不是特别numpy。看见
>>> q = lambda: (b[0] < x) & (x < b[1])
>>> timeit(q, number=100000)
0.22948266800000283