我有这个使用 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)
我想使用 seed=5 的生成器在此矩阵中添加 10 个零。 我想创建一个维度为 [5,10] 的新数组,并在其中放入 10 个零,其余为一个,然后将两个数组相乘,但我必须使用生成器,所以我不能这样做。
最佳答案
尝试使用 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]])
关于Python - 如何在现有矩阵中随机添加 n 个零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66675811/