Essayez numpy.clip
:
>>> import numpy
>>> a = numpy.arange(-10, 10)
>>> a
array([-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2,
3, 4, 5, 6, 7, 8, 9])
>>> a.clip(0, 10)
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
Vous ne pouvez couper que la moitié inférieure avec clip(0)
.
>>> a = numpy.array([1, 2, 3, -4, 5])
>>> a.clip(0)
array([1, 2, 3, 0, 5])
Vous ne pouvez couper que la moitié supérieure avec clip(max=n)
. (C'est bien mieux que ma suggestion précédente, qui impliquait de passer NaN
au premier paramètre et d'utiliser out
pour forcer le type.):
>>> a.clip(max=2)
array([ 1, 2, 2, -4, 2])
Une autre approche intéressante consiste à utiliser where
:
>>> numpy.where(a <= 2, a, 2)
array([ 1, 2, 2, -4, 2])
Enfin, pensez à aix de réponse. Je préfère clip
pour les opérations simples car c'est auto-documenté, mais sa réponse est préférable pour des opérations plus complexes.
numpy
? Avez-vous essayé la méthode de clip dea
? La fonction intégréenumpy.clip
me donne la même erreur, mais pas la méthode.Une autre solution Python minimaliste sans utiliser numpy:
[0 if i < 0 else i for i in a]
Pas besoin de définir des fonctions supplémentaires.
a = [1, 2, 3, -4, -5.23, 6] [0 if i < 0 else i for i in a]
donne:
[1, 2, 3, 0, 0, 6]
la source
for
applique à chaque élément de la liste, le mettre après, signifie que seulement si la condition est remplie, il va dans la liste résultante.i < 0 ? 0 : i
en C) dans une compréhension de liste. Mettez des crochets pour le rendre plus clair[(0 if i < 0 else i) for i in a]
. Mettre le if après utilise la partie filtre de la construction d'expression de liste.[(i) for i in a if i < 0]
renverra uniquement une liste d'éléments inférieurs à zéro.Et encore une autre possibilité:
In [2]: a = array([1, 2, 3, -4, 5]) In [3]: where(a<0, 0, a) Out[3]: array([1, 2, 3, 0, 5])
la source
Voici un moyen de le faire en Python sans NumPy. Créez une fonction qui renvoie ce que vous voulez et utilisez une compréhension de liste ou la fonction de carte .
>>> a = [1, 2, 3, -4, 5] >>> def zero_if_negative(x): ... if x < 0: ... return 0 ... return x ... >>> [zero_if_negative(x) for x in a] [1, 2, 3, 0, 5] >>> map(zero_if_negative, a) [1, 2, 3, 0, 5]
la source