我正在尝试返回加起来为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。
我坚持在同一个函数中生成多个列表。我知道这可以在函数外部完成..使用[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
答案 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)