숫자가 작아서 조건이 참인 범위/범위를 찾아야한다고 가정 해보십시오. 예를 들어, 내가 항목이 1보다 큰 스팬 찾기 위해 노력하고있는 다음과 같은 배열이 있습니다NumPy를 사용하여 조건이 참인 span을 찾습니다.
[0, 0, 0, 2, 2, 0, 2, 2, 2, 0]
내가 인덱스를 찾을 필요가 있습니다 (시작, 중지) :
(3, 5)
(6, 9)
시작 및 종료 포 찾을 numpy.argmin
및 numpy.argmax
를 사용하여 배열을 통해 반복 다음
truth = data > threshold
과 : 가장 빠른 것은 내가의 부울 배열을하고 구현할 수있었습니다 위치.
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
는하지만 내 배열에서 위치의 수십억 내가 찾는거야 스팬 그냥 보통 행에 몇 위치 있다는 사실 너무 느리다. 누구든지이 기간을 찾는 더 빠른 방법을 알고 있습니까?
이것은 답으로 보입니다. 7 백만 포인트 이상의 실행은 원래 코드의 50 분에 비해 약 20 초 걸렸습니다. 감사! – ACEnglish
'roll'이 사용 중이기 때문에 가장자리 케이스가 올바르지 않습니다. 예를 들어 스팬의 시작 위치가 0 인 경우 마지막 항목이 'True'일 때만 스팬을 얻을 수 있습니다. – Cuadue
@Cuadue 그건 사실이야, 나는이 시점을 바로 잡아야한다고 생각하는 막연한 기억을 가지고있다. 어떻게 든 롤 첫 번째와 마지막 (?) 요소를 업데이트해야한다 ...: –