самый быстрый способ заменить значения в массиве значением в той же позиции в другом массиве, если они соответствуют условию - PullRequest
1 голос
/ 21 февраля 2020

Я пытаюсь использовать этот синтаксис для замены значений в массиве значениями в той же позиции в другом массиве, если они соответствуют условию:

array[array>limit]=other_array[array>limit]

Это работает, но я думаю, что я мог бы сделать это Трудный путь. Есть мысли?

Ответы [ 2 ]

2 голосов
/ 21 февраля 2020

Использование np.where:

Параметры

условие: array_like, bool

   Where True, yield x, otherwise yield y.

x, y: array_like

   Values from which to choose. x, y and condition need to be broadcastable to some shape.

Возвращает

out: ndarray

   An array with elements from x where condition is True, and elements from y elsewhere.

Пример:

a1 = np.array([3, 2, 4, 1])
a2 = a1 + 10

limit = 2
>>> np.where(a1 > limit, a2, a1)
array([13,  2, 14,  1])
0 голосов
/ 21 февраля 2020

Вы можете сделать это в одном назначении, используя argwhere (), чтобы заменить индексы, но ваш подход быстрее, если вы не оцениваете условие дважды:

import numpy as np

array1 = np.arange(100)
array2 = np.arange(1000,1100)

condition = array1%3==0 # avoid doing this twice
array1[condition] = array2[condition]

output:

print(array1)

[1000    1    2 1003    4    5 1006    7    8 1009   10   11 1012   13
   14 1015   16   17 1018   19   20 1021   22   23 1024   25   26 1027
   28   29 1030   31   32 1033   34   35 1036   37   38 1039   40   41
 1042   43   44 1045   46   47 1048   49   50 1051   52   53 1054   55
   56 1057   58   59 1060   61   62 1063   64   65 1066   67   68 1069
   70   71 1072   73   74 1075   76   77 1078   79   80 1081   82   83
 1084   85   86 1087   88   89 1090   91   92 1093   94   95 1096   97
   98 1099]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...