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.