python-使Numpy.where在遇到第一个true之后停止

我正在尝试按输入大小扩展一段代码,瓶颈似乎是调用numpy.在这里,我仅使用第一个真实索引:

indexs = [numpy.where(_<cump)[0][0] for _ in numpy.random.rand(sample_size)]

如果我能告诉numpy在遇到第一个真值后停止运行,我会快得多(我正在反转一个累积密度函数-cump-它在cump的第一个数组值上快速增长).我可以通过循环和中断来手动完成此操作,但是我想知道是否有pythonista的方式可以执行此操作?

解决方法:

如果cump是累积密度函数,则它是单调的,因此进行了排序.通过线性搜索,您将获得最佳性能保证,而不是线性扫描.

首先,我们创建一些虚假数据进行搜索:

>>> import numpy as np
>>> cump = np.cumsum(np.random.rand(11))
>>> cump -= cump[0]
>>> cump /= cump[-1]
>>> cump
array([ 0.        ,  0.07570573,  0.1417473 ,  0.30536346,  0.36277835,
        0.47102093,  0.54456142,  0.6859625 ,  0.75270741,  0.84691162,  1.
   ])

然后,我们创建一些虚假数据来搜索:

>>> sample = np.random.rand(5)
>>> sample
array([ 0.19597276,  0.37885803,  0.2096784 ,  0.57559965,  0.72175056])

最后我们搜索它(找到它!):

>>> [np.where(_ < cump)[0][0] for _ in sample]
[3, 5, 3, 7, 8]
>>> np.searchsorted(cump, sample)
array([3, 5, 3, 7, 8], dtype=int64)
上一篇:java-解决滑动拼图难题时的A *算法执行时间很长


下一篇:PHP-MySQL查询优化?