我有一个列表叫大理石。大理石= 10.000项(5000蓝色和5000红色)
我想执行一个测试,其中“def A1.primo():“将计算并返回在较小样本中比在较大样本中重复更多的测量随机事件。使用(k=4,k=7)
import random
marbles = ["RED" for _ in range(5000)] + ["BLUE" for _ in range(5000)]
A = random.choices(marbles, k=4)
print(A) # this will print a list of 4 random Items from the list
如何优化代码,然后将从A1.primo返回的数字保存到csv.文件中
2条答案
按热度按时间j9per5c41#
使用for循环。
6jygbczu2#
更换和未更换的取样
理解替换取样和不替换取样的区别是很重要的。假设我们有一袋1个蓝色和2个红色的弹珠,你选择了2个弹珠。如果你在拉出第一个弹珠后把弹珠放回去,就有可能得到2个蓝色弹珠。这叫做 * 替换取样。使用
random.choice
就是 * 替换取样。随机选择()和随机样本()
您可以使用
random
模块中的choices()
函数提取多个元素。例如,从1个红色和2个蓝色弹珠 * 的袋子中取样4个弹珠,并进行 * 替换:您可以使用
sample
函数,通过random
模块进行 * 无 * 替换采样:不出所料,这会产生一个错误。你不能从一个有3个弹珠的袋子里抽出4个弹珠。现在,如果我们在袋子里放1000个红色弹珠和2000个蓝色弹珠,我们会得到:
内存使用和权重
上述示例可能存在的问题是,如果您有更多的弹球,则需要大量内存。因此,
choice()
函数有一个weights
参数。您可以按如下方式使用该函数:遗憾的是,
random
模块没有使用权重进行无替换采样的功能。使用循环重复采样
最后,我们需要计算结果。一个更高级的方法是使用字典和
collections
模块中的defaultdict
。作为替代方法,我们将创建一个结果列表,并使用该列表的一个集合循环遍历不同的结果。输入随机
样本量= 4重复抽样= 100