numpy ufuncと組み込み演算子と組み込み演算子の「関数」バージョンを使用する利点とトレードオフに興味があります。
私はすべてのufuncに興味があります。たぶん、あるものは他のものよりも役に立つ時があります。ただし、<
簡単にするために例に使用します。
numpy 配列を単一の数値で「フィルタリング」してブール配列を取得する方法はいくつかあります。どの形式でも同じ結果が得られますが、いずれかを使用するのに適した時間/場所はありますか? この例では、配列を単一の数値と比較しているため、3 つすべてが機能します。
次の配列を使用したすべての例を検討してください。
>>> x = numpy.arange(0, 10000)
>>> x
array([ 0, 1, 2, ..., 9997, 9998, 9999])
「<」演算子
>>> x < 5000
array([ True, True, True, ..., False, False, False], dtype=bool)
>>> %timeit x < 5000
100000 loops, best of 3: 15.3 us per loop
operator.lt
>>> import operator
>>> operator.lt(x, 5000)
array([ True, True, True, ..., False, False, False], dtype=bool)
>>> %timeit operator.lt(x, 5000)
100000 loops, best of 3: 15.3 us per loop
numpy.less
>>> numpy.less(x, 5000)
array([ True, True, True, ..., False, False, False], dtype=bool)
>>> %timeit numpy.less(x, 5000)
100000 loops, best of 3: 15 us per loop
それらはすべて、ほぼ同等のパフォーマンスとまったく同じ結果を達成することに注意してください。とにかく、これらの呼び出しはすべて実際には同じ関数で終わると推測しています。<
どちらもnumpy配列にoperator.lt
マップされているため、おそらくまたは同等のものを使用して実装されていますか?__lt__
numpy.less
では、どちらがより「慣用的」で「好ましい」のでしょうか?