Programing

numpy의 배열에서 연속 요소 그룹을 찾는 방법은 무엇입니까?

lottogame 2020. 12. 28. 07:41
반응형

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])==1False실행 중 중단을 나타내는 부울 배열을 생성 합니다. 내장 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 = []

주의하십시오-처리해야 할 위의 범위를 벗어난 인덱스 오류가 숨겨져 있습니다.

참조 URL : https://stackoverflow.com/questions/7352684/how-to-find-the-groups-of-consecutive-elements-from-an-array-in-numpy

반응형