Filtrer les lignes d'un tableau numpy?
Je suis à la recherche d'appliquer une fonction à chaque ligne d'un tableau numpy. Si cette fonction renvoie la valeur vrai je vais garder la ligne, sinon je vais le jeter. Par exemple, ma fonction pourrait être:
def f(row):
if sum(row)>10: return True
else: return False
Je me demandais si il y avait quelque chose de similaire à:
np.apply_over_axes()
qui applique une fonction à chaque ligne d'un tableau numpy et retourne le résultat. Je m'attendais à quelque chose comme:
np.filter_over_axes()
qui permettrait d'appliquer une fonction à chaque ligne d'un tableau numpy et retourner uniquement les lignes pour lesquelles la fonction retourné véritable. Est-il quelque chose comme cela? Ou devrais-je simplement utiliser une boucle for?
source d'informationauteur kyphos
Vous devez vous connecter pour publier un commentaire.
Idéalement, vous serez en mesure de mettre en œuvre un vectorisé version de votre fonction et de l'utiliser pour faire boolean indexation. Pour la grande majorité des problèmes c'est la bonne solution. Numpy fournit quelques fonctions qui peuvent agir sur différents axes ainsi que toutes les opérations de base et des comparaisons, donc la plupart des conditions utiles devraient être vectorizable.
Si vous êtes absolument sûr que vous ne pouvez pas faire la-dessus, je voudrais suggérer à l'aide d'une compréhension de liste (ou
np.apply_along_axis
) pour créer un tableau de booléens à l'index.Ce le travail sera fait en un nombre relativement propre, mais sera beaucoup plus lent qu'un vectorisé version. Un exemple: