Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 检查数组的元素是否在边界内_Python_Performance - Fatal编程技术网

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]>>timeit(q,数字=100000) 0.22948266800000283
不错!你能解释一下为什么重塑有这么大的影响吗?我认为这是因为“简单索引”方法比“高级索引”方法更快。不幸的是,我找不到numpy索引的实际代码,所以我无法确认这一点。这是由于元素在内存中的存储方式。第一种解决方案执行跨步内存访问,而第二种解决方案执行连续内存访问。跨步内存访问速度较慢(尤其是阵列较大时)。这是由于硬件本身,而不是特别numpy。看见
>>> q = lambda: (b[0] < x) & (x < b[1])
>>> timeit(q, number=100000)
0.22948266800000283