반응형
numpy의 배열에서 연속 요소 그룹을 찾는 방법은 무엇입니까?
numpy 배열에서 연속 요소를 클러스터링해야합니다. 다음 예를 고려하면
a = [ 0, 47, 48, 49, 50, 97, 98, 99]
출력은 다음과 같은 튜플 목록이어야합니다.
[(0),(47, 48, 49, 50),(97, 98, 99)]
여기서 차이점은 하나입니다. 요소 사이. 차이가 제한 또는 하드 코딩 된 숫자로도 지정 될 수 있다면 좋을 것입니다.
감사합니다.
다음은 도움이 될 수있는 lil func입니다.
def group_consecutives(vals, step=1):
"""Return list of consecutive lists of numbers from vals (number list)."""
run = []
result = [run]
expect = None
for v in vals:
if (v == expect) or (expect is None):
run.append(v)
else:
run = [v]
result.append(run)
expect = v + step
return result
>>> group_consecutives(a)
[[0], [47, 48, 49, 50], [97, 98, 99]]
>>> group_consecutives(a, step=47)
[[0, 47], [48], [49], [50, 97], [98], [99]]
def consecutive(data, stepsize=1):
return np.split(data, np.where(np.diff(data) != stepsize)[0]+1)
a = np.array([0, 47, 48, 49, 50, 97, 98, 99])
consecutive(a)
수확량
[array([0]), array([47, 48, 49, 50]), array([97, 98, 99])]
(a[1:]-a[:-1])==1
False
실행 중 중단을 나타내는 부울 배열을 생성 합니다. 내장 numpy.grad를 사용할 수도 있습니다 .
이것이 제가 지금까지 생각 해낸 것입니다. 100 % 정확하지 않습니다.
import numpy as np
a = np.array([ 0, 47, 48, 49, 50, 97, 98, 99])
print np.split(a, np.cumsum( np.where(a[1:] - a[:-1] > 1) )+1)
보고:
>>>[array([0]), array([47, 48, 49, 50]), array([97, 98, 99])]
숙제처럼 들리니 괜찮으 시다면 접근 방식을 제안하겠습니다
다음을 사용하여 목록을 반복 할 수 있습니다.
for i in range(len(a)):
print a[i]
목록의 다음 요소가 다음과 같은 기준을 충족하는지 테스트 할 수 있습니다.
if a[i] == a[i] + 1:
print "it must be a consecutive run"
결과를 별도로 저장할 수 있습니다.
results = []
주의하십시오-처리해야 할 위의 범위를 벗어난 인덱스 오류가 숨겨져 있습니다.
반응형
'Programing' 카테고리의 다른 글
React Native에서 iOS 상태 표시 줄 배경색을 설정하는 방법은 무엇입니까? (0) | 2020.12.28 |
---|---|
디자인 패턴이 솔루션 대신 문제가되는 경우는 언제입니까? (0) | 2020.12.28 |
Javascript : * string * 숫자의 소수 자릿수를 검색하는 방법은 무엇입니까? (0) | 2020.12.28 |
문자열에서 숫자 추출-StringUtils Java (0) | 2020.12.28 |
Mongodb : 127.0.0.1:27017에 연결하지 못했습니다. 이유 : errno : 10061 (0) | 2020.12.28 |