生成0-1范围内的随机稀疏数据

时间:2016-06-16 14:06:47

标签: python apache-spark

我正在尝试生成0-1范围内的稀疏3维非参数数据集,其中数据集也应包含零。我尝试使用以下方法生成此内容:

training_matrix = numpy.random.rand(3000, 3)

但它不会在任何行中将数据打印为0.00000。

2 个答案:

答案 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]]