Comment devrais-je comparer plus de 2 matrices numpues?
import numpy a = numpy.zeros((512,512,3),dtype=numpy.uint8) b = numpy.zeros((512,512,3),dtype=numpy.uint8) c = numpy.zeros((512,512,3),dtype=numpy.uint8) if (a==b==c).all(): pass
4 Réponses :
Pour trois matrices, vous pouvez vérifier l'égalité entre les éléments correspondants entre les premier et second matrices, puis les deuxième et troisième tableaux pour nous donner deux scalaires booléens et enfin voir si ces deux stagiers sont true code > Pour la sortie scalaire finale, comme -
L = [a,b,c] # List of input arrays
out = (np.diff(np.vstack(L).reshape(len(L),-1),axis=0)==0).all()
quel est le besoin de remodeler (len (l), - 1), cela fonctionne bien même sans que
@Jayanthreddy non, ça ne le fait pas. Cet axe contiendrait le premier axe des tableaux d'entrée fusionnés avec l'axe d'empilement. Nous devons donc diviser cet axe en deux avec ce remodelage. Pour clarifier avec un exemple, essayez avec a = np.random.randint (0,9, (4,5,3)); B = A.Copy (); c = A.Copy () code>.
Pour trois tableaux, vous devriez vraiment les comparer à deux à la fois: pour un nombre variable de tableaux, supposons qu'ils soient tous combinés dans un grand tableau tableaux code>. Ensuite, vous pourriez faire P>
if np.all(arrays[:-1] == arrays[1:]):
do_whatever()
@JayantHreddy: Probablement parce que vous avez formulé des tableaux code> une liste ou quelque chose.
Pour développer les réponses précédentes, j'utiliserais combinaisons code> à partir de
iTertools code> pour construire toutes paires, puis exécutez votre comparaison sur chaque paire. Par exemple, si j'ai trois matrices et que je veux confirmer qu'ils sont tous égaux, j'utiliserais:
from itertools import combinations
for pair in combinations([a, b, c], 2):
assert np.array_equal(pair[0], pair[1])
Construire toutes les paires n'est pas nécessaire (puisque A = B et B = C impliquerait A = C). Une simple boucle comparant 2 tableaux à la fois serait plus efficace de calcul.
C'est correct! Ceci est explicitement inefficace. Juste une méthode de comparaison intuitivement / de manière transparente chaque article aux autres.
Cette réponse est utile pour float code> des tableaux où vous voudriez utiliser
allcLose code>
au lieu de array_equal code>;
AllClose code> n'est pas transitif . @Elsewhere Peut-être que vous pourriez accroître votre réponse en fonction de cela que la question ne demande pas explicitement de comparer pour l'égalité et ne restreint pas les tableaux
int code>.
comparer contre le premier élément de la liste des array: p> all_equal(lst_eq)= True
all_equal(lst_neq)= False
"Et je ne suis pas intéressé par la comparaison de tableaux deux à la fois" - Eh bien, c'est la meilleure option que vous avez.
@ user2357112 qui ne serait pas facile s'il y a beaucoup de tableaux