a
とb
は整数の2つのNumpy配列です。それらはソートされ、繰り返しはありません。b
のサブセットですa
。a
のすべての要素のインデックスを見つける必要がありますb
。Pythonループを回避できるように役立つ効率的なNumpy関数はありますか?
(実際には、配列pandas.DatetimeIndex
はとNumpydatetime64
ですが、答えは変わらないと思います。)
numpy.searchsorted()
これを行うために使用できます:
In [15]: a = np.array([1, 2, 3, 5, 10, 20, 25])
In [16]: b = np.array([1, 5, 20, 25])
In [17]: a.searchsorted(b)
Out[17]: array([0, 3, 5, 6])
私が理解していることから、それはb
ソートする必要はなく、で二分探索を使用しa
ます。これは、O(n)ではなくO(n logn)であることを意味します。
それだけでは不十分な場合は、常にCythonがあります。:-)