Python numpy.random.choice:ValueError:p中的非零项少于size
我想根据Python numpy.random.choice:ValueError:p中的非零项少于size,python,numpy,Python,Numpy,我想根据prob为给定行指定的概率分布随机选择样本点。然而,当我调用np.random.choice时,我得到了错误ValueError:p中的非零条目少于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
prob
为给定行指定的概率分布随机选择样本点。然而,当我调用np.random.choice
时,我得到了错误ValueError:p中的非零条目少于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 smaller
prob[all_zero] = 1 / prob.shape[1] # fill those rows uniformly
prob /= prob.sum(axis=1, keepdims=True)
# ... somewhere later inside a method
for j in range(14):
sample = np.random.choice(6890, 4, replace=False, p=prob[j]) # error occurs here
将numpy导入为np
#prob是一个形状的numpy数组(146890)
all_zero=np.where(prob.max(1)<1e-6)[0]#查找所有值都较小的行的索引
prob[all_zero]=1/prob.shape[1]#均匀填充这些行
prob/=prob.sum(轴=1,keepdims=True)
# ... 稍后在方法中的某个地方
对于范围(14)内的j:
sample=np.random.choice(6890,4,replace=False,p=prob[j])#此处出现错误
问题在于您使用的是np.random.choice
您要求在6890个条目的数组中选择4个条目,而不重复使用值(replace=False
),这些条目的非空值少于4个,例如:
np.random.choice(5,1,replace=False,p=[0,0,0,0.6,0.4])
数组([4])
>>>np.random.choice(5,4,replace=False,p=[0,0,0.6,0.4])
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
np.random.choice(5,4,replace=False,p=[0,0,0.6,0.4])
文件“mtrand.pyx”,第826行,位于numpy.random.mtrand.RandomState.choice中
ValueError:p中的非零项少于大小
>>>np.random.choice(5,4,replace=True,p=[0,0,0.6,0.4])
数组([3,3,4,3])
因此,解析取决于您的需要,您可以确保有更多的非空值,或者在随机选择中启用替换
作为参考,numpy.random.choice的文档:
torch
用户相比,numpy
用户多得多。如果你能用numpy
重现这个错误,你会接触到更多的人好吧,我把那部分删掉了。