J'ai le code suivant:
[1 1 1 0]
array3 sera:
array1 = np.array([1,0,1,0]) array2 = np.array([1,1,0,0]) array3 = array1 | array2
Ce code fonctionne bien mais je voudrais l'étendre vers plus de tableaux sans écrire array1 | array2 | array3 | etc .
Quelqu'un connaît-il un moyen efficace de faire cela? Peut-être utiliser .any ()?
4 Réponses :
Vous pouvez utiliser reduction avec operator.or_:
import operator from functools import reduce reduce(operator.or_, [array1, array2]) # array([1, 1, 1, 0])
Notez que dans Python 3, reduction a été déplacé vers la bibliothèque functools , mais en Python 2, c'est un intégré.
J'ai opté pour l'autre réponse car je travaille dans numpy. Votre solution a l'air bien aussi et je la garderai à l'esprit la prochaine fois que je n'utiliserai pas np!
Je m'en tiens à NumPy ici, mais il existe plusieurs façons de le faire. Voici en utilisant logical_or.reduce.
np.column_stack([array1, array2]).any(axis=1) # array([ True, True, True, False])
Une autre variante utilise l'utilisation de column_stack et any :
np.logical_or.reduce([array1, array2]) # array([ True, True, True, False])
Je pense à np.any ([array1, array2], axis = 0) peut fonctionner ici?
@ Wen-Ben Yup. Mais tout doit encore convertir la liste [array1, array2] en un nouveau tableau. C'est à peu près la même chose que column_stack, peut-être légèrement plus rapide ... peut-être pourrions-nous en apprendre plus sur les horaires :)
Puisque vous étiquetez pandas une façon d'utiliser any pour | , si vous avez besoin de & essayez avec tout
pd.DataFrame([array1,array2]).any(1).values
Oh wow. Je demandais en fait d'incorporer cela dans quelque chose que je fais dans les pandas, donc c'est génial. Je vous remercie!
@HenryDashwood ha, bon codage :-)
Vous pouvez également résumer les deux tableaux. Si l'un des éléments est 1, la somme sera 1. Si les deux sont 1, la somme sera 2, auquel cas vous réaffectez la valeur de 1 en utilisant np.where comme
array3 = np.where(array1+array2==2, 1, array1+array2) # array([1, 1, 1, 0])
Je ne sais pas comment cela se fait en Python, mais le concept est connu sous le nom de «repli», «réduction» ou «accumulation». Recherchez des fonctions similaires dans le std python.
Haha googler est beaucoup plus facile quand on connaît le terme! Merci beaucoup