Numpy заменяет определенные строки и столбцы одного массива конкретными строками и столбцами другого массива - PullRequest
0 голосов
/ 09 июня 2018

Я пытаюсь заменить определенные строки и столбцы массива Numpy, как указано ниже.

Значения массива a и b изначально такие же, как показано ниже:

a = [[1 1 1 1]
     [1 1 1 1]
     [1 1 1 1]]

b = [[2 3 4 5]
     [6 7 8 9]
     [0 2 3 4]]

Теперь на основепо определенной вероятности мне нужно выполнить поэлементную замену a на значения b (скажем, после генерации случайного числа, r, между 0 и 1 для каждого элемента, я заменю элемент a с b, если r> 0,8).

Как я могу использовать numpy / scipy, чтобы сделать это в Python с высокой производительностью?

1 Ответ

0 голосов
/ 09 июня 2018

С маскировка .Сначала мы генерируем матрицу с такими же размерами случайных чисел и проверяем, больше ли они 0.8:

mask = np.random.random(a.shape) > 0.8

Теперь мы можем присвоить значения b, где mask равно True к соответствующим индексам a:

a[mask] = b[mask]

Например:

>>> a
array([[1., 1., 1., 1.],
       [1., 1., 1., 1.],
       [1., 1., 1., 1.]])
>>> b
array([[2, 3, 4, 5],
       [6, 7, 8, 9],
       [0, 2, 3, 4]])
>>> mask = np.random.random(a.shape) > 0.8
>>> mask
array([[ True, False, False, False],
       [ True, False, False, False],
       [False, False, False, False]])
>>> a[mask] = b[mask]
>>> a
array([[2., 1., 1., 1.],
       [6., 1., 1., 1.],
       [1., 1., 1., 1.]])

Итак, где mask равно True (поскольку 0.8 довольномаксимум, мы ожидаем в среднем 2,4 таких значений), присваиваем соответствующее значение b.

...