python中的random.choice,元素的均匀分布

2024-09-30 04:27:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我用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循环中? 还有,为什么如果我打印(len(d))它会显示999而不是1000? 此外,有时我会得到负值。为什么


Tags: 函数nprandommingcatchoiceproba
1条回答
网友
1楼 · 发布于 2024-09-30 04:27:09

是的,有时候,你可以得到一个负值。这很正常

  • gcRange=[40,60]和mini=10(用mini替换min)
  • maxC=gcRange[1]-最小//最大值=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可能是负数

相关问题 更多 >

    热门问题