2014-01-21 3 views
0

matplotlib와 함께 파이썬을 사용하여 플롯을 만들려고합니다. 나는 함수가 streaks()이고, 확률이 p이고 확률이 n 인 목록을 'True'로 지정하고 연속 줄무늬 목록을 반환합니다. 예를 들어 [True, False, True, True, False][1, 1, 2, 1]입니다.중첩 루프를 사용하여 파이썬에서 플롯 만들기

이 함수를 n의 각 값에 대해 500 번 사용해야합니다 (0부터 400까지 10 단위로). n의 각 값에 대한 이러한 500 번의 시도에서 최대 연승 행보를 찾아 500 번의 시도에 대해 평균을 취해야합니다.

마지막 플롯에는 n을 나타내는 x 축과 평균 최대 줄무늬를 나타내는 y 축이 있습니다.

내 코드는 내가 원하는 것을하지 않고 모든 구성 요소를 갖고있는 것처럼 느껴집니다. 어떤 도움을 주시면 감사하겠습니다. 감사!

def averagemaximums(): 
    maxvals = [] 
    avgmaxvals = [] 

    for j in range(500): 
     for n in range(0, 400, 10): 
      maxvals.append(max(streaks(0.5, n))) 
      a = (sum(maxvals))/(500) 
      avgmaxvals.append(a) 

    plot(avgmaxvals) 
    show() 

편집 : 추가 정보 요청에 따라 :

#Makes list of bools 
def bools(p, n): 
    return (rand(n) < p) 

#Makes list that counts successive values 
def streaks(p, n): 
    run = bools(p, n) 

    successionlist = [] 

    counter = 1 
    for j in range(1, n): 
     if run[j] == run[j - 1]: 
      counter = counter + 1 
     else: 
      successionlist.append(counter) 
      counter = 1 
    successionlist.append(counter) 
    return successionlist 
+1

는 [최소, 테스트, 완벽한 읽을 예]를 게시하시기 바랍니다 (http://stackoverflow.com/help/mcve). 말하자면, 우리가 실행할 수있는 포스트 코드 ('streaks (...)'정의를 추가하십시오)가 도움이됩니다. – Christian

+0

@Christian 죄송합니다. 질문을 수정했습니다. 바라건대 지금은 충분히 명확합니다. – user2901181

+1

@Christian 나는 그것을 다시 편집했다. 나는 마지막 두 줄을 잊어 버렸다. 나는 어떤 오류도 내지 않고있다. 그냥 잘못된 음모. – user2901181

답변

0

당신은 각각의 값을 만드는 데 사용되는 N의 값을 저장하지 않습니다. 따라서 argmaxvals를 그릴 때, 당신은 n 대신에 그것들의리스트 인덱스에 대해 그려줍니다.

이 수정을 시도해보십시오

for j in range(500): 
     for n in range(0, 400, 10): 
      maxvals.append(max(streaks(0.5, n))) 
      a = (sum(maxvals))/(500) 
      avgmaxvals.append((n,a)) 
    x,y = zip(*argmaxvals) 
    plot(x,y) 
    show() 
+0

도움 주셔서 감사합니다. 코드 수정으로 문제가 해결되는 것 같지 않지만 지금 문제를보고 해결책을 찾으려고합니다. – user2901181

관련 문제