我正在尝试生成0-1范围内的稀疏3维非参数数据集,其中数据集也应包含零。我尝试使用以下方法生成此内容:
training_matrix = numpy.random.rand(3000, 3)
但它不会在任何行中将数据打印为0.00000。
答案 0 :(得分:2)
由于您希望所有5个数字都为零,因此发生概率为1/10 ^ 5 = 0.00001,并且需要替换。即使您有3000 * 3 = 9000的值,获得该概率的概率仍然可以忽略不计。为了您的安心,您可以尝试做的其他事情是生成随机数并在特定点截断它们,即如果您愿意,则为5位小数。
答案 1 :(得分:2)
我们首先按nrows
列创建3
行的零数组:
import numpy as np
nrows = 3000 # total number of rows
training_matrix = np.zeros((nrows, 3))
然后我们从nz
中随机绘制(不替换)range(nrows)
个整数。这些数字是具有非零数据的行的索引。 training_matrix
的稀疏度由nz
确定。您可以调整其值以满足您的需求(在此示例中,稀疏度设置为50%):
nz = 1500 # number of rows with nonzero data
indices = np.random.choice(nrows, nz, replace=False)
最后,我们通过advanced indexing随机数填充选定的行:
training_matrix[indices, :] = np.random.rand(nz, 3)
这是您通过运行上述代码获得的:
>>> print(training_matrix)
[[ 0.96088615 0.81550102 0.21647398]
[ 0. 0. 0. ]
[ 0.55381338 0.66734065 0.66437689]
...,
[ 0. 0. 0. ]
[ 0.03182902 0.85349965 0.54315029]
[ 0.71628805 0.2242126 0.02481218]]