Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python numpy.random.choice:ValueError:p中的非零项少于size_Python_Numpy - Fatal编程技术网

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
重现这个错误,你会接触到更多的人好吧,我把那部分删掉了。