2014-02-24 3 views
2

여기가 내 문제입니다. 나는 1의 단계에서 출력을 55에서 0으로 감소시키는 실시간 시스템의 출력을 수집하려고합니다.이 데이터를 기록하고 있습니다. 나는 55,54,53, ... 3,2,1, 반환하는 모든 데이터를 캡처했습니다. 시스템 지연에 일부 샘플 반복하세요 일부 샘플 예 를 놓친 기인하지만, I 얻을python에서 허용 오차가있는 패턴을 검색하는 방법

[55, 53, 52, 52, 51, 50, 49, 48, 47, 46, 45, 44 43, 42, 41, 39, 38, 38, 36, 36, 34, 33, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 20

그래서, 나는 패턴을 갖는다. (예를 들어, (18, 17, 15, 14, 13, 13, 12, 11, 10, 9, 8, 7, 55에서 0) 그러나 일부 샘플은 빠졌고 일부 샘플은 반복되었습니다. 스크립트를 작성하여 추출 할 수있는 방법이 있습니까?

내 목표는 여기 (하지만 그 샘플링에 의한 단일 미스과 반복을 차지한다) 55 0에 1 단계에서 무슨 일이 있었는지 확인하는 코드입니다 : 내가 잘 이해하면

for x in range(len(b)-1): 
    e += b[x] - b[x+1] 
    print x,b[x]-b[x+1], b[x], b[x+1] 
    print 'reached %d count in %d decrements' % (e, len(b)-1) 
+1

무엇을 추출 하시겠습니까? 놓친 샘플? 반복되는 샘플들? 얼마나 많은 것이 반복 되는가? 직접 코드를 작성하려고 했습니까? – rabs

+0

나는 55에서 1까지의 데이터를 추출하고 싶다. (55,53,53 ...과 같은 반복과 실패) 반복없이 숫자의 순서와 비교한다. (55,54,53 .... 1) 단일 샘플을 놓친 경우 코드가 실제로 무시해야합니다. 이 경우 54를 놓치고 53을 두 번 반복하면 52를 찾아야한다는 것을 이해해야합니다. 허용 오차는 1이어야합니다. 예 : 55,53,52 ... 1은 괜찮지만 55,52, 50,49는 그렇지 않습니다. – user2927392

+0

@rabs 충분히 견고하지 못한 코드를 작성했습니다. 그것이하는 일은 : 카운트가 55 일 때 파일에서 인덱스를 취하고 0까지 도달하는 데 걸린 단계 수를 계산합니다. 목표는 55에서 0까지 1의 단계로 발생했는지 확인하는 것입니다. 다음은 x의 코드입니다. b [x] -b [x + 1], b [x], b [x], b [x], b [x] +1] print '% d 개가 % d 개 감소했습니다'% (e, len (b) -1) – user2927392

답변

3

,

In [1]: import numpy as np 

In [2]: A = [55, 53, 52, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 39, 38, 38, 36, 36, 34, 33, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 20, 18, 17, 15, 14, 13, 13, 12, 11, 10, 9, 8, 7, 7, 5, 4, 3, 2, 1] 


In [3]: np.diff(A) 
Out[3]: 
array([-2, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -2, -1, 0, 
     -2, 0, -2, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
     -1, 0, -2, -1, -2, -1, -1, 0, -1, -1, -1, -1, -1, -1, 0, -2, -1, 
     -1, -1, -1]) 

-1은 예상 단계이고 -2는 누락 된 단계이며 0은 반복입니다. 그리고 당신은 어디에 알고 싶다면되는 문제 :

In [4]: np.where(np.diff(A) != -1)[0] # [0] because it's 1D array 
Out[4]: array([ 0, 2, 14, 16, 17, 18, 19, 21, 35, 36, 38, 41, 48, 49]) 

가 명확하지 있는지 말해. 모든 샘플 세트를 찾을하려는 경우

1

다른 방법으로는, 사람들의 세트를 찾을 수 없습니다, 반복되는 사람들은 :

b = [55, 53, 52, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 39, 38, 38, 36, 36, 34, 33, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 20, 18, 17, 15, 14, 13, 13, 12, 11, 10, 9, 8, 7, 7, 5, 4, 3, 2, 1] 

unique_b = set(b) 
not_in_b = [x for x in xrange(1, 56) if x not in b] 
repeats_in_b = [x for x in xrange(1,56) if b.count(x) > 1] 

print unique_b 
print not_in_b 
print repeats_in_b 

>>>set([1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 36, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 55]) 
>>>[6, 16, 19, 35, 37, 40, 54] 
>>>[7, 13, 20, 33, 36, 38, 52] 
관련 문제