У меня есть массив myA
следующим образом:
array([ 7, 4, 5, 8, 3, 10])
Если я хочу заменить все значения, превышающие значение val
на 0, я могу просто сделать:
myA[myA > val] = 0
который дает мне желаемый результат (для val = 5
):
array([0, 4, 5, 0, 3, 0])
Однако моя цель - заменить не все, а только первые n
элементы этого массива, которые больше значения val
.
Итак, если n = 2
мой желаемый результат будет выглядеть следующим образом (10
является третьим элементом и поэтому не должен быть заменен):
array([ 0, 4, 5, 0, 3, 10])
Прямая реализация:
import numpy as np
myA = np.array([7, 4, 5, 8, 3, 10])
n = 2
val = 5
# track the number of replacements
repl = 0
for ind, vali in enumerate(myA):
if vali > val:
myA[ind] = 0
repl += 1
if repl == n:
break
Это работает, но, может быть, кто-то может справиться с умным способом маскировки!?