Existe-t-il un moyen pratique d'appliquer le même opérateur booléen (disons ou ) à tous les éléments d'un tableau sans utiliser une boucle for ?
Je vais clarifier ce dont j'ai besoin avec un exemple:
import numpy as np a=np.array([[1,0,0],[1,0,0],[0,0,1]]) b=a[0] | a[1] | a[2] print b
Quelle est la manière synthétique d'appliquer l'opérateur booléen ou à tous les tableaux d'une matrice comme je l'ai fait ci-dessus?
4 Réponses :
Vous pouvez utiliser la fonction réduire pour cela:
from functools import reduce a = np.array([[1,0,0],[1,0,0],[0,0,1]]) reduce(np.bitwise_or, a)
Il est plus efficace d'utiliser ufunc.reduce , c'est-à-dire np.logical_or.reduce (a) ou np.any (a, axis = 0) code >
La façon habituelle de faire cela serait d'appliquer numpy.any le long d'un axe:
numpy.logical_or.reduce(a, axis=0)
Cela dit, il existe également un moyen de le faire via l'opérateur plus directement. NumPy ufuncs a une méthode reduction qui peut être utilisé pour les appliquer le long d'un axe d'un tableau, ou sur tous les éléments d'un tableau. En utilisant numpy.logical_or.reduce , nous pouvons exprimer cela comme
numpy.any(a, axis=0)
Cela ne revient pas beaucoup, car la plupart des ufuncs que vous voudriez call reduction on a déjà défini des fonctions d'assistance équivalentes. add a somme , multiplier a prod , logical_and a tout , logical_or a any , maximum a amax et minimum a amin.
essayez soit:
df.any(axis=0)
ou
np.apply_along_axis(any, 0, arr)
ou si vous souhaitez utiliser des pandas pour une raison quelconque,
np.any(arr, axis=0)
REMARQUE: je ne suis pas un expert en numby, donc je fais une hypothèse ci-dessous;
Dans votre exemple, b compare les tableaux les uns aux autres, donc il demande:
" Y a-t-il des éléments dans un [0] OU des éléments dans un 1 a > OU des éléments dans un 2 "est-ce votre objectif? dans ce cas, vous pouvez utiliser intégré à any () p >
par exemple (changé numby en une simple liste de listes):
a=np.array([[1,0,0],[1,0,0],[0,0,1]]) b=a.any() print b
b sera Vrai
si toutefois, vous voulez savoir si l'un de ses éléments est vrai, par exemple, vous voulez savoir si un [0] [0] OU un 0 | a 0 | a [1] [0] | ...
vous pouvez utiliser la carte intégrée a>, donc quelque chose comme:
a=[[1,0,0],[1,0,0],[0,0,1]] b=any(map(any, a) print b
b sera toujours True
Remarque: ci-dessous est basé sur la recherche de la documentation NumPy, pas une expérience réelle.
Pour NumPy, vous pouvez également utiliser NumPy any () option quelque chose comme
a=[[1,0,0],[1,0,0],[0,0,1]] b=any(a) print b
ou, si vous faites quand même tous les nombres, vous pouvez additionner le tableau et voir si c'est le cas! = 0
qu'entend-on par
synthétique?Je veux dire essentiellement sans boucle
for. Je me demande s'il existe une fonction numpy ou quelque chose de similaire pour appliquer simplement l'opérateurouà tous les éléments comme je viens de le faire manuellement.|n'est qu'un OU logique pour les tableaux booléens. Votreb = a [0] | a [1] | a [2]fait des OU au niveau du bit.