numpy 配列があり、その条件が True であるスパン/範囲を見つける必要があるとします。たとえば、項目が 1 より大きいスパンを見つけようとしている次の配列があります。
[0, 0, 0, 2, 2, 0, 2, 2, 2, 0]
インデックス (開始、停止) を見つける必要があります。
(3, 5)
(6, 9)
私が実装できた最速の方法は、次のブール配列を作成することです。
truth = data > threshold
numpy.argmin
次に、 andを使用して配列をループし、numpy.argmax
開始位置と終了位置を見つけます。
pos = 0
truth = container[RATIO,:] > threshold
while pos < len(truth):
start = numpy.argmax(truth[pos:]) + pos + offset
end = numpy.argmin(truth[start:]) + start + offset
if not truth[start]:#nothing more
break
if start == end:#goes to the end
end = len(truth)
pos = end
しかし、これは、配列内の数十億の位置に対して遅すぎました。また、見つけたスパンは、通常、連続した数個の位置にすぎません。これらのスパンを見つけるためのより速い方法を知っている人はいますか?