2017-12-06 8 views
0

최대 11 개의 숫자가 포함 된 숫자 목록을 반환하려고합니다.동일한 함수 내에서 여러 번 함수의 결과가 반환됩니다.

numpy 무작위 균일 분포에서 생성 된 3 개의 수가 있습니다.

if 문을 추가하여 각 목록 (총 11 개)의 첫 번째, 두 번째 및 세 번째 숫자에 피어슨 상관 계수> 0.99가 표시되는지 확인하고 싶습니다. 내가 각 구성 요소를 플롯 할 수 있다면 그렇게

import math 
import pandas as pd 
import matplotlib.pyplot as plt 
import numpy as np 

c1_high = 98 
c1_low = 75 
c2_high = 15 
c2_low = 6 
c3_high = 8 
c3_low = 2 

def mix_gen(): 
    while True: 
     c1 = np.random.uniform(c1_low, c1_high) 
     c2 = np.random.uniform(c2_low, c2_high) 
     c3 = np.random.uniform(c3_low, c3_high) 
     tot = c1+c2+c3 

     if 99.99<= tot <=100.01: 
      comp_list = [c1,c2,c3] 
      return comp_list 

my_list = mix_gen() 
print(my_list) 

: 순간

, 나는 내가 다음 코드 한 100

에 해당하는 금액을 숫자 1 개 목록을 생성 할 경우에만 수 있어요 .. 예를 들어 c1 ... 나는 0.99보다 큰 R^2 값을 얻습니다.

enter image description here

나는 같은 함수 내에서 여러 목록을 생성에 붙어있어. 나는 이것이 함수 밖에서 할 수 있다는 것을 알고있다. [mix_gen() for _ range (11)] ..를 사용한다. 그러나 이것은 11리스트를 반환하기 전에 peasron corr coef의 추가 체크가 필요하기 때문에 작동하지 않을 것이다.

목적 :

다음 값으로 dataframe을 반환 :

C1 C2 C3 sum 
1 70 20 10 100 
2 .. 
3 .. 
4 .. 
5 .. 
6 .. 
7 .. 
8 .. 
9 .. 
10 .. 
11 90 
R^2 1  1  1 
+0

counte 컨테이너에 11 개의리스트를 추가하기 전에'if' 내부에 r 플래그를 넣고'while'에서 리턴하지 마십시오 – joaquin

+0

아마'yield '를 찾고있을 것입니다 –

답변

1

이것은

def mix_gen(number): 
    flag = 0 
    container = [] 
    while flag < number: 
     c1 = np.random.uniform(c1_low, c1_high) 
     c2 = np.random.uniform(c2_low, c2_high) 
     c3 = np.random.uniform(c3_low, c3_high) 
     tot = c1+c2+c3 

     if 99.99 <= tot <= 100.01: 
      flag += 1 
      container.append([c1,c2,c3]) 

    return container 

당신은 그것을 호출 반환 목록의 목록을 사용하여 옵션이 될 수 있습니다

my_list_of_lists = mix_gen(11) 
+0

아, 감사합니다. – Joey

+0

예, 실제로입니다! 이제 어떻게 든 각 구성 요소 C1, C2 및 C3에 대해 컨테이너의 11 개 항목을 확인해야합니다. R^2> 0.99 = /. – Joey

+0

'container_C1 = [컨테이너의 항목에 대한 항목 [0]]'으로 할 수 있지만 R^2 값> 0.99가되지 않으면 루프로 되돌릴 수있는 방법이 확실하지 않습니다. hmm – Joey