Définir les éléments du tableau numpy à zéro s'ils sont au-dessus d'un seuil spécifique
Dire, j'ai un tableau numpy se compose de 10
éléments, par exemple:
a = np.array([2, 23, 15, 7, 9, 11, 17, 19, 5, 3])
Maintenant, je veux efficacement l'ensemble de tous les a
des valeurs supérieures à 10
à 0
donc je vais l'obtenir:
[2, 0, 0, 7, 9, 0, 0, 0, 5, 3]
Parce que j'utilise actuellement un for
boucle, qui est très lente:
# Zero values below "threshold value".
def flat_values(sig, tv):
"""
:param sig: signal.
:param tv: threshold value.
:return:
"""
for i in np.arange(np.size(sig)):
if sig[i] < tv:
sig[i] = 0
return sig
Comment puis-je réaliser que dans la manière la plus efficace, en tenant compte de grands tableaux de, disons, 10^6
éléments?
source d'informationauteur bluevoxel
Vous devez vous connecter pour publier un commentaire.
Généralement, les interprétations de la liste sont plus rapides que
for
boucles en python (parce que python sait qu'il n'a pas besoin de soins pour beaucoup de choses qui pourraient se produire dans unfor
boucle):mais, comme @unutbu correctement soulignénumpy permet de liste de l'indexation, et l'élément de sage comparaison de vous donner l'indice de listes, de sorte que:
serait encore plus rapide.
Généralement, lors de l'application de méthodes sur des vecteurs de données, avoir un regard sur
numpy.ufuncs
qui, souvent, sont plus performants que python fonctions de la carte à l'aide de tout mécanisme natif.