в python как заменить указанные c элементы массива случайным образом с определенной вероятностью? - PullRequest
1 голос
/ 19 января 2020

Для такого массива:

import numpy as np
x = np.random.randint(0, 2, (5,5))

Как заменить случайным образом десятки с вероятностью 0,3? Это то, что я пытался, но я не знаю, лучший ли это метод

mask = np.random.rand(5, 5)<0.3
x[x==1 * mask] = 10

1 Ответ

1 голос
/ 19 января 2020

Вы можете получить места соответствующего значения (x==1) и затем заменить, используя np.random.choice:

import numpy as np
np.random.seed(1) ## fixing seed for replicability
x = np.random.randint(0, 2, (5,5))

Out[1]:
array([[1, 1, 0, 0, 1],
       [1, 1, 1, 1, 0],
       [0, 1, 0, 1, 1],
       [0, 0, 1, 0, 0],
       [0, 1, 0, 0, 1]])


x1, y1 = np.where(x==1)
replace_v = np.random.choice([1.,10.],len(x1), p=[0.7,0.3])
x[x1,y1] = replace_v

Out[2]: 
array([[ 1,  1,  0,  0,  1],
       [10,  1,  1, 10,  0],
       [ 0, 10,  0, 10, 10],
       [ 0,  0,  1,  0,  0],
       [ 0,  1,  0,  0, 10]])

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...