Mam tablicę myA
takiego:Jak wymienić tylko pierwsze n elementów w tablicy numpy, które są większe niż określona wartość?
array([ 7, 4, 5, 8, 3, 10])
Jeśli chcę zastąpić wszystkie wartości, które są większe niż wartość val
przez 0, mogę po prostu zrobić:
myA[myA > val] = 0
który daje mi sygnał wyjściowy (dla val = 5
):
array([0, 4, 5, 0, 3, 0])
jednak moim celem jest zastąpienie nie wszystkich, ale tylko pierwszy n
elementy tej tablicy, które są większe niż wartość val
.
Tak więc, jeśli n = 2
mój pożądany rezultat będzie wyglądać następująco (10
jest trzeci element, a zatem nie powinny zostały zastąpione):
array([ 0, 4, 5, 0, 3, 10])
Prosta implementacja będzie:
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
Że działa, ale może ktoś może wymyślić mądry sposób maskowania !?
Bardzo elegancki, dzięki. Przekazałem go na razie i mogę go zaakceptować później, zależnie od jakości pozostałych odpowiedzi. – Cleb