为了账号安全,请及时绑定邮箱和手机立即绑定

Python numpy.random.choice:ValueError:p 中的非零条目少于大小

Python numpy.random.choice:ValueError:p 中的非零条目少于大小

互换的青春 2022-05-24 16:11:59
我想根据prob给定行指定的概率分布随机选择样本点。但是,ValueError: Fewer non-zero entries in p than size当我调用np.random.choice. 甚至是什么意思size?我还查看了实现,但我不明白。谢谢你的帮助!!import numpy as np# prob is a numpy array of shape (14, 6890)all_zero = np.where(prob.max(1) < 1e-6)[0] # find indices of rows where all values are smallerprob[all_zero] = 1 / prob.shape[1] # fill those rows uniformlyprob /= prob.sum(axis=1, keepdims=True)# ... somewhere later inside a methodfor j in range(14):    sample = np.random.choice(6890, 4, replace=False, p=prob[j]) # error occurs here
查看完整描述

1 回答

?
侃侃无极

TA贡献2051条经验 获得超10个赞

问题在于您使用np.random.choice您要求在 6890 个具有少于 4 个非空值的条目的数组中选择4个条目而不重用值 ( ) ,例如:replace=False


>>> np.random.choice(5, 1, replace=False, p=[0, 0, 0, 0.6, 0.4])

array([4])


>>> np.random.choice(5, 4, replace=False, p=[0, 0, 0, 0.6, 0.4])

Traceback (most recent call last):

  File "<input>", line 1, in <module>

    np.random.choice(5, 4, replace=False, p=[0, 0, 0, 0.6, 0.4])

  File "mtrand.pyx", line 826, in numpy.random.mtrand.RandomState.choice

ValueError: Fewer non-zero entries in p than size


>>> np.random.choice(5, 4, replace=True, p=[0, 0, 0, 0.6, 0.4])

array([3, 3, 4, 3])

所以分辨率取决于你的需要,你要么确保有更多的非空值,要么在随机选择中启用替换。


作为参考,numpy.random.choice 的文档:


https://docs.scipy.org/doc/numpy-1.15.0/reference/generated/numpy.random.choice.html


查看完整回答
反对 回复 2022-05-24
  • 1 回答
  • 0 关注
  • 774 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信