生成仅填充值0或1的随机稀疏矩阵

时间:2015-04-20 10:27:35

标签: python numpy random scipy sparse-matrix

我正在尝试使用SciPy生成随机csr_matrix,但我需要它只填充值0或1。

到目前为止,我正在尝试使用:

rand(1000, 10, density=0.2, format='csr', random_state=np.random.randint(0, 2))

我得到了我想要的正确结构和密度,但填充它的值是0到1之间的浮点数。

有没有办法只用浮点数0或1生成这个结构?

3 个答案:

答案 0 :(得分:7)

您可以简单地将随机矩阵中的非零值替换为:

from scipy.sparse import rand

x = rand(1000, 10, density=0.2, format='csr')
x.data[:] = 1

print(np.unique(x.todense().flat))
# [ 0.  1.]

我不认为random_state= kwarg做你认为它做的事情 - 它只是允许你为随机数生成器指定种子,或者明确传递np.random.RandomState实例作为RNG。

答案 1 :(得分:1)

np.random.randint(0,2,1000)

将生成0到1之间的1000个随机变量。那么,它取决于您想要用于矩阵的容器

my_v = np.random.randint(0,5,1000)
my_v[my_v>1]=1

答案 2 :(得分:0)

怎么样

import scipy.sparse as ss
data = ss.random(1000, 10, density=.2, format='csr',
                 data_rvs=np.ones,   # fill with ones
                 dtype='f'           # use float32 first
                 ).astype('int8')    # then convert to int8

ss.random仅支持float32最小的浮点类型,而int8是可用的最小整数类型。

有关更多信息,请参见https://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.random.html