在同一个函数中多次返回一个函数的结果

returning result of a function multiple times within the same function

我正在尝试 return 一个加起来为 100 .. 11 次的数字列表。

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

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

目前,我只能生成 1 个总和等于 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... 我会得到 >0.99 的 R^2 值。

我无法在同一函数内生成多个列表。我知道这可以在函数之外完成。使用 [mix_gen() for _ in range(11)].. 但这不起作用,因为我需要在 [=35 之前对 peasron corr coeff 进行额外检查=]ing 11 个列表。

OBJECTIVE:

到 return 具有以下值的数据框:

   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

这可以是使用列表列表的选项 return

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)