在同一函数

时间:2017-12-06 10:26:25

标签: python pandas loops numpy pearson-correlation

我正在尝试返回加起来为100 .. 11次的数字列表。

有3个数字是由numpy随机均匀分布产生的。

我想添加一个if语句来查看每个列表的第1个,第2个和第3个数字(总共11个)..如果绘制的话,Pearson相关系数大于0.99。

目前,我只能生成一个总和等于100的数字列表。

我有以下代码:

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)

所以,如果我要绘制每个组件...例如c1 ...我会得到R ^ 2值> 0.99。

enter image description here

我坚持在同一个函数中生成多个列表。我知道这可以在函数外部完成..使用[mix_gen()for _ in range(11)] ..但是这不起作用,因为我需要在返回11个列表之前对eggron 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

1 个答案:

答案 0 :(得分: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)