Как выполнить случайные мутации на двоичном np.ndarray на основе вероятности? - PullRequest
1 голос
/ 06 ноября 2019

У меня есть массив numpy, заполненный -1 и 1.

Как выполнить случайные мутации с заданной вероятностью мутации (от -1 до 1 или от 1 до -1)?

Вот пример того, чего я хочу достичь:

>>> arr
array([[-1,  1,  1],
       [-1, -1, -1],
       [ 1, -1,  1]])

>>> mutation(arr, p=0.2)
array([[-1, -1,  1],
       [-1, -1,  1],
       [ 1, -1,  1]])

Здесь значения в индексах [0, 1] и [1, 2] были изменены.

При p =1, каждое значение должно быть изменено.

1 Ответ

2 голосов
/ 06 ноября 2019

Вот один из способов на основе np.random.choice -

def mutation(arr, p_val):
    m = np.random.choice([True,False],size=arr.shape,p=[p_val,1-p_val])
    return np.where(m,-np.sign(arr),arr)

Итак, в основном с np.random.choice мы создаем маску с p_val соотношением True значений иостальные False. Затем мы используем эту маску с np.where, чтобы выбрать элементы с arr и изменить их, то есть изменить 1s на -1s и наоборот, оставив остальные как есть.

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