gpt4 book ai didi

python - 如何创建一个函数(迭代/递归)来运行 Python 中的元组字典?

转载 作者:太空宇宙 更新时间:2023-11-04 03:41:24 25 4
gpt4 key购买 nike

我有一个像这样的列表的 Python 字典:

d = {'A': [(4, 4, 3), [1, 2, 3, 4, 5]],
'B': [(2, 1, 2), [5, 4, 3, 2, 1]],
'C': [(4, 1, 1), [2, 4, 1, 2, 4]]}

我需要创建一个公式来访问字典的元素,并且对于每个值 [t, l]:

  • 计算 t 的平均值(我们称之为 m);
  • l中随机抽样s,带替换且长度为len(t)
  • ms 的平均值进行比较 - 如果 m 大于 的平均值,则为 True >s,否则为False
  • 重复此过程 10,000 次
  • 返回 m 大于 s 平均值的次数的百分比。

输出应该是这样的:

In [16]: test(d)   
Out[16]: {'A': 0.5, 'B': 0.9, 'C': 0.4}

我想我离答案不远了,这是我试过的:

def test(dict):
def mean_diff(dict):
for k, (v0, v1) in dict.iteritems():
m = np.mean(v0) > (np.mean(npr.choice(v1, size=(1, len(v0)), replace=True)))
return ({k: m})
for k, (v0, v1) in dict.iteritems():
bootstrap = np.array([means_diff(dict) for _ in range(10000)])
rank = float(np.sum(bootstrap))/10000
return ({k: rank})

但是,我得到了:

RuntimeError: maximum recursion depth exceeded while calling a Python object

最佳答案

我会使用列表推导式,它本质上是选择一个随机值并将其与平均值进行比较。这将产生一个 True/False 列表。如果您取其平均值,它将对 1 和 0 的列表进行平均,因此它将为您提供总概率。

import numpy as np

d = {'A': [(4, 4, 3), [1, 2, 3, 4, 5]],
'B': [(2, 1, 2), [5, 4, 3, 2, 1]],
'C': [(4, 1, 1), [2, 4, 1, 2, 4]]}

def makeRanks(d):
rankDict = {}
for key in d:
tup = d[key][0]
mean = np.mean(tup)
l = d[key][1]
rank = np.mean([mean > np.mean(np.random.choice(l,len(tup))) for _ in range(10000)])
rankDict[key] = rank
return rankDict

测试

>>> makeRanks(d)
{'C': 0.15529999999999999, 'A': 0.72130000000000005, 'B': 0.031899999999999998}

关于python - 如何创建一个函数(迭代/递归)来运行 Python 中的元组字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26239940/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com