J'ai une tâche très simple et numpy fait quelque chose que je ne comprends pas. J'essaie de remplacer les éléments d'un tableau qui répondent à certains critères par un nombre compris entre 0 et 1, et numpy les convertit tous en zéros. Par exemple:
In [1]: some_array = np.array([0,0,0,1,0,1,1,1,0])
In [2]: nonzero_idxs = np.where(some_array != 0)[0]
In [3]: nonzero_idxs
Out[3]: array([3, 5, 6, 7])
In [4]: some_array[nonzero_idxs] = 99
In [5]: some_array
Out[5]: array([ 0, 0, 0, 99, 0, 99, 99, 99, 0])
In [6]: some_array[nonzero_idxs] = 0.2
In [7]: some_array[nonzero_idxs]
Out[7]: array([0, 0, 0, 0])
In [8]: some_array[nonzero_idxs] == 0
Out[8]: array([ True, True, True, True], dtype=bool)
Comme le montre l'exemple ci-dessus, le remplacement des valeurs par une valeur arbitraire fonctionne comme prévu, mais si vous essayez de le remplacer par un décimal, cela le transforme en zéro (et ils ne ressemblent pas seulement à des zéros lorsque vous imprimez le tableau, ils évalue comme égal à zéro). Le même comportement se produit lorsque j'essaie de procéder par d'autres moyens, par exemple en utilisant np.place.
Je fais cela dans iPython sur le terminal, si cela fait une différence. Quelqu'un peut-il expliquer ce qui se passe ici et comment l'éviter? Toutes mes excuses s'il s'agit d'un doublon.
some_array = np.array([0,0,0,1,0,1,1,1,0]).astype(float)
L'utilisation du tableau numpy comme flottant résoudra votre problème. Par défaut, il semble être son entier et ramène simplement la valeur à zéro.
nonzero_idxs = np.where(some_array != 0)[0]
some_array[nonzero_idxs] = 0.2
# output: array([0. , 0. , 0. , 0.2, 0. , 0.2, 0.2, 0.2, 0. ])
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots