J'ai deux grands tableaux avec environ 1000 lignes et 1000 colonnes. J'ai besoin de comparer chaque élément de ces tableaux et de stocker 1 dans un autre tableau si les éléments correspondants sont égaux. Je peux le faire avec des boucles for, mais cela prend beaucoup de temps. Comment puis-je faire cela plus rapidement?Comment comparer tous les éléments de deux tableaux?
Répondre
Si vos deux matrices A
et B
sont de la même taille, alors vous pouvez le faire:
index = A == B;
et index
sera un logical array avec ceux partout un élément de A
et B
sont égaux et zéro autrement.
Un mot d'avertissement ...
Si A
et B
contiennent des entiers, le devrait être bien au-dessus. Cependant, s'ils contiennent des valeurs à virgule flottante, vous pouvez obtenir des résultats non souhaités. Le code ci-dessus aura seulement des valeurs de un pour les éléments qui sont exactement égale. Même la plus petite différence fera que les éléments seront considérés comme inégaux.
Pour plus d'informations sur le traitement des «périls des opérations en virgule flottante», consultez le document this question's answers. Une solution serait de vérifier que les éléments tableau sont dans une tolérance donnée les uns des autres, comme si:
tolerance = 0.0001;
index = abs(A-B) <= tolerance;
ci-dessus vous donnera un tableau logique index
avec les partout les éléments de A
et B
sont à 0,0001 l'autre et zéro sinon.
Matlab a une fonction eps, décrite comme une précision relative en virgule flottante.Vous pouvez l'utiliser à la place de la variable de tolérance dans le code de gnovice. indice = abs (A-B) <= eps; – yuk
eps est la plus petite valeur qui peut être représentée, n'est-ce pas? Ce n'est pas très utile dans ce contexte. –
Il suffit d'utiliser l'opérateur ==
normal:
>> [1 2; 3 4] == [1 5; 6 4]
ans =
1 0
0 1
Les réponses données sont tous corrects. Je voulais juste élaborer sur gnovice's remarque sur les tests à virgule flottante. Lorsque vous comparez des nombres à virgule flottante pour l'égalité, il est nécessaire d'utiliser une valeur de tolérance. Deux types de comparaisons de tolérance sont couramment utilisés: la tolérance absolue et la tolérance relative. (source)
Une comparaison de tolérance absolue de a
et b
ressemble à:
|a-b| < tol
Une comparaison de tolérance relative ressemble:
|a-b| < tol*max(|a|,|b|) + tol_floor
Vous pouvez implémenter les deux fonctions ci-dessus comme anonymes:
%# absolute tolerance equality
isequalAbs = @(x,y,tol) (abs(x-y) <= tol);
%# relative tolerance equality
isequalRel = @(x,y,tol) (abs(x-y) <= (tol*max(abs(x),abs(y)) + eps));
Ensuite, vous pouvez les utiliser comme:
%# let x and y be scalars/vectors/matrices of same size
x == y
isequalAbs(x, y, 1e-6)
isequalRel(x, y, 1e-6)
- 1. MATLAB: comparer tous les éléments de deux tableaux
- 2. MATLAB: comparer tous les éléments dans trois tableaux
- 3. comment comparer deux tableaux d'objets
- 4. Comparer 2 éléments de deux tableaux en C++
- 5. problème de comparer deux tableaux
- 6. Comparer tableaux jQuery avec plusieurs éléments DOM
- 7. comparer deux tableaux, obtenir les valeurs Uncommon
- 8. Comparer l'ordre de trois tableaux avec les mêmes éléments
- 9. comparer deux tableaux de différentes longueurs et Afficher les différences
- 10. comment trouver la distance entre les éléments de deux tableaux?
- 11. Comparer deux tableaux contenant des chaînes?
- 12. Comparer deux éléments de listes en python
- 13. éléments manquants de deux tableaux en Java
- 14. Java: Comparaison de deux tableaux de chaînes et suppression des éléments qui existent dans les deux tableaux
- 15. Créer un tableau de tous les éléments dans les sous-tableaux d'un tableau de tableaux?
- 16. Comment comparer deux tableaux d'objets DataRow dans PowerShell?
- 17. Comparer deux tableaux associatifs et de créer un nouveau tableau avec les tableaux assortis, PHP
- 18. comment comparer les deux date
- 19. XPath pour comparer deux attributs distincts de deux éléments
- 20. générer tous les 3 * 3 deux tableaux multidimensionnels
- 21. comparer deux flotteurs pour voir s'ils sont tous les deux négatifs, ou les deux positifs
- 22. équivalent de 'dans' pour comparer deux tableaux NumPy
- 23. Comparer aux valeurs de deux tableaux en PHP
- 24. Comment puis-je trouver des éléments impairs de deux tableaux
- 25. tableaux php trouver les éléments présents dans tous les sous-tableaux
- 26. Comment comparer deux requêtes?
- 27. Comment comparer deux éléments sans ID ou classe jQuery
- 28. Comment comparer deux dates
- 29. Comment comparer les tableaux et extraire la différence?
- 30. Objective-C - Comment comparer les tableaux et extraire la différence?
Toujours, toujours vectoriser le code MATLAB lorsque cela est possible. – Doresoom
Devrait être déplacé vers http://math.stackexchange.com/? – aaronsnoswell