numpy Python -如何在现有矩阵中随机添加n个零?

omqzjyyz  于 5个月前  发布在  Python
关注(0)|答案(3)|浏览(65)

我用default_rng生成了这个数组:

import numpy as np
from numpy.random import default_rng
rng = default_rng(seed=10)
rng = rng.integers(1,20,(5,10))
rng

>>>array([[15, 19,  6,  4, 16, 16, 10,  3, 16, 10],
          [ 3,  3,  8, 14,  8, 16,  1,  9, 10, 19],
          [ 5, 16,  2,  7, 15, 11, 18, 15, 18, 16],
          [ 3, 18, 17,  3, 19, 15,  6,  3,  8, 18],
          [15,  5, 10, 17, 13,  6,  3, 19,  5, 10]], dtype=int64)

字符串
我想在这个矩阵中添加10个零,使用生成器,种子=5。我想创建一个新的数组与dimessions [5,10],并把10个零里面,其余的是一个,然后multiliply两个数组,但我必须使用生成器,所以我不能这样做。

8cdiaqws

8cdiaqws1#

尝试使用np.random.choice选择索引,然后将这些索引处的值设置为0

np.random.seed(10)
idx = np.random.choice(np.arange(5*10), size=5, replace=False)

rng.ravel()[idx] = 0

字符串
输出量:

array([[15, 19,  6,  4, 16, 16, 10,  3, 16, 10],
       [ 3,  3,  8, 14,  8, 16,  1,  9, 10, 19],
       [ 5, 16,  2,  0, 15, 11, 18, 15, 18, 16],
       [ 3, 18, 17,  3, 19, 15,  6,  0,  8, 18],
       [15,  5,  0, 17,  0,  6,  3,  0,  5, 10]])

fcipmucu

fcipmucu2#

当然

idx = np.random.choice(rng.ravel(), 10, replace= False)
print(idx)
rng.ravel()[idx] = 0
rng

字符串
输出

[10 17  3  6 15 15 15 16 15 15]

array([[15, 19,  6,  0, 16, 16,  0,  3, 16, 10],
       [ 0,  3,  8, 14,  8,  0,  0,  0, 10, 19],
       [ 5, 16,  2,  7, 15, 11, 18, 15, 18, 16],
       [ 3, 18, 17,  3, 19, 15,  6,  3,  8, 18],
       [15,  5, 10, 17, 13,  6,  3, 19,  5, 10]], dtype=int64)


所以我只取6,而不是取10个零,因为15在我的idx中出现了5次。

bmp9r5qi

bmp9r5qi3#

也许你可以试试这个:

import numpy as np
from numpy.random import default_rng

rng = default_rng(seed=10)
a=rng.integers(1,20,(5,10)) #creates the initial matrix
print("This is the initial matrix")
print(a)

rep= default_rng(seed=5)
row=rep.integers(0,5,(10,)) 
print("This is the random row index")
print(row)

column=rep.integers(0,10,(10,))
print("This is the random column index")
print(column)
a[row,column]=0 #set the random seats to 0

字符串
你在矩阵中随机得到5个位置,替换为值零(0)

相关问题