python - python中的random.choice,元素的均匀分布
问题描述
我在 python 中编写了一个函数,它以这种格式生成字典:
{"A":20,"T":20,"G":30,"C":30} 我希望在 GC 40%-60% 的范围内生成每个值
def makeDict(gcRange, min):
maxC = gcRange[1]-min
probC = random.choice(np.arange(min, maxC, 2))
gc = [gcRange[0]-probC, gcRange[1]-probC]
probG = random.choice(np.arange(gc[0], gc[1], 2))
at = 100 - probC - probG
probA = at/2
probT = at/2
return({"A":probA, "T":probT, "G":probG, "C":probC})
d=[]
for i in range(1,1000):
d.append(makeDict([40,60],10))
我知道 random.choise 发生替换,而 random.sample 发生而不替换。我希望它可以替换,因为我要生成 1000 个字典。但是,当我在循环中生成 1000 个字典时,我希望随机选择这些值的均匀分布。random.choice 函数中是否已经发生这种情况,还是我需要设置权重?如果是,如何?在函数中还是在for循环中?另外,为什么如果我执行 print(len(d)) 它会显示 999 而不是 1000?此外,有时我会得到负值。为什么?
解决方案
是的,有时,您可以获得负值。这是正常的。
- gcRange = [40,60] 和 mini = 10(将 min 替换为 mini)
- maxC = gcRange[1]-mini // maxC = 50
- probC = random.choice(np.arange(mini, maxC, 2)) // probC 可能需要 50 (maxC)
- gc = [gcRange[0]-probC, gcRange[1]-probC] // gc = [40-50, 60 -50] = [-10, 10]
- probG = random.choice(np.arange(gc[0], gc[1], 2)) // 所以 probG 可能是负数
推荐阅读
- javascript - 如何从 Javascript 中的 JSON 格式获取对象 ID
- apache-spark - 使用 SparkSession 读取、过滤和计算 CSV 文件的行数时如何处理 NullPointerException?
- error-handling - 安装odoo模块的问题
- typescript - 使用类与接口的 Typescript 对象反序列化
- amazon-web-services - 与 T3 EC2 实例相比,使用 T2 是否有任何优势?
- python - 如何提取存储在 JSON 文件中的二维数组?
- php - PHP OpenSSL 加密与 DES-ECB 算法意外输出
- keycloak - 一个资源中的用户数 Keycloak
- email - 无法打开套接字:stream_socket_client():无法连接到 tcp://92.204.134.154:587
- java - 从主菜单返回时如何关闭应用程序