4

abは整数の2つのNumpy配列です。それらはソートされ、繰り返しはありません。bのサブセットですaaのすべての要素のインデックスを見つける必要がありますb。Pythonループを回避できるように役立つ効率的なNumpy関数はありますか?

(実際には、配列pandas.DatetimeIndexはとNumpydatetime64ですが、答えは変わらないと思います。)

4

1 に答える 1

12

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があります。:-)

于 2013-03-04T15:36:46.987 に答える