numpy.digitize / numpy.searchsorted:没有IndexError的循环索引

时间:2017-10-12 11:07:28

标签: python arrays numpy scipy

我已经矢量化了一个数组values的测试值,我希望在bins数组中找到它们的位置。 numpy允许使用np.digitizenp.searchsorted

import numpy as np
values=np.arange(-5.1,20.9,0.5)
bins=np.arange(10)

indices=np.digitize(values,bins)
indices2=np.searchsorted(bins,values)
assert((indices==indices2).all()), 'NB np.digitize and np.searchsorted argument orders are reversed'

这似乎很明显,但我现在希望使用我漂亮的闪亮矢量数组indices,但以下内容会引发IndexError,因为np.digitizenp.searchsorted(帮助)设置对0len(bins)的越界输入:

print bins[indices] # -> IndexError

由于的重点是保持所有向量化,因此在没有for循环的情况下捕获IndexError的最佳方法是什么,因此将bins[indices]的输出分配给另一个数组以便向前如何计算? (可根据要求提供剪辑值:))

我应该使用自定义映射函数还是lambda? (沿着How to make scipy.interpolate give an extrapolated result beyond the input range?的行 - 除了我不想插入一个精确的数组)

感谢所有人的帮助

更新

我实际上可以 - 在我的情况下 - 通过以下方式实现所需的前进行为:

indices[indices==len(bins)]=len(bins)-1
print bins[indices]

但这确实会失去一些信息*和最常见的,最佳实践路线 - 这就是我所追求的 - 对我来说并不清楚。

*那是因为我不再能够区分可接受的指数和那些超出界限的指数。

0 个答案:

没有答案