2017-12-06 20 views
0

最大で100までの数のリストを返そうとしています。11回。同じ関数内で関数の結果を複数回返す

numpyのランダムな一様分布から生成される3つの数があります。

if文を追加して、各リスト(合計11個)の第1、第2、第3の数字がピアソン相関係数> 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 coeffの追加チェックが必要なので、これは機能しません。

目的:

次の値でデータフレームを返すために:

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 = [item [0] for container in item']とすることはできますが、R^2の値が0.99を超えないとループに戻す方法がわかりません。 hmm – Joey

関連する問題