我已经矢量化了一个数组values
的测试值,我希望在bins
数组中找到它们的位置。 numpy
允许使用np.digitize
或np.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.digitize
和np.searchsorted
(帮助)设置对0
或len(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]
但这确实会失去一些信息*和最常见的,最佳实践路线 - 这就是我所追求的 - 对我来说并不清楚。
*那是因为我不再能够区分可接受的指数和那些超出界限的指数。