【问题标题】:Python ValueError: alpha <= 0 Dirichlet DistrubutionPython ValueError: alpha <= 0 Dirichlet 分布
【发布时间】:2022-10-15 07:48:52
【问题描述】:

我有一个选举的投票结果。我想为每次投票从 Dirichlet 分布中模拟 50000 次抽签。但是当我运行这个单元格时。我收到此错误,但无法弄清楚我错在哪里。任何帮助,将不胜感激。

我的代码如下:

number= 50000

for i in range(len(dAll)):
    vector =list(dAll[i][3:7])

    random=np.random.dirichlet(vector,number)

    postn=[]
    for i in range(number): postn.append(random[i].argmax(axis=0))
    postn=np.array(postn)
    
    PNPD=100*len(np.where(postn ==0)[0])/number
    ProbPNPD.append(PNPD)
    
    PL=100*len(np.where(postn ==1)[0])/number
    ProbPL.append(PL)
    
    AD=100*len(np.where(postn ==2)[0])/number
    ProbAD.append(AD)
    
    Others=100*len(np.where(postn ==3)[0])/number
    ProbOthers.append(Others)

#Probability of victory for each party
    setprint=False
    if setprint == True:
        print('PNPD',PNPD,'%')
        print('PL',PL,'%')
        print('AD',AD,'%')
        print('Others',Others,'%')

错误代码:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-7-16ba25b5e62c> in <module>
      4     vector =list(dAll[i][3:7])
      5 
----> 6     random=np.random.dirichlet(vector,number)
      7 
      8     postn=[]

mtrand.pyx in numpy.random.mtrand.RandomState.dirichlet()

ValueError: alpha <= 0

我的数据集中没有任何负数。 check in here

【问题讨论】:

  • 我不知道vector 包含哪些值,但似乎其中一些是&lt;= 0
  • 您应该至少尝试自己调试它,向量中的值是什么?如果其中任何一个是否定的,那么这就是您的问题,从错误消息中非常清楚。
  • 我检查了我的数据。没有任何负值。
  • 零值也会触发相同的错误。

标签: python python-3.x random dirichlet numpy-random


【解决方案1】:

好吧,当我改变这部分时:

for i in range(len(dAll)):
    vector =list(dAll[i][3:7]) --> vector =list(dAll[i][3:**6**])

我解决这个问题。但是我仍然必须添加此列进行分析。

【讨论】:

  • 请使用您问题上的编辑链接添加其他信息。 Post Answer 按钮应仅用于问题的完整答案。 - From Review
猜你喜欢
  • 2012-05-26
  • 1970-01-01
  • 1970-01-01
  • 2016-09-20
  • 1970-01-01
  • 1970-01-01
  • 2016-12-01
  • 1970-01-01
  • 2022-12-17
相关资源
最近更新 更多