Maison >développement back-end >Tutoriel Python >Comment déterminer si un tableau Numpy contient une ligne spécifique ?

Comment déterminer si un tableau Numpy contient une ligne spécifique ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-21 18:29:021005parcourir

How to Determine if a Numpy Array Contains a Specific Row?

Rechercher si un tableau Numpy contient une ligne spécifique

Lorsque vous travaillez avec des tableaux Numpy, il devient parfois nécessaire de vérifier si une ligne spécifique existe au sein du tableau. Contrairement aux listes Python standard, les tableaux Numpy fournissent des nuances uniques qui nécessitent des approches spécialisées lors de l'exécution de telles vérifications.

Différences entre les tableaux Numpy

Contrairement aux tableaux Python, les tableaux Numpy présentent un comportement différent lorsque tester l'existence des lignes à l'aide de l'opérateur in :

<code class="python"># Python Array
a = [[1, 2], [10, 20], [100, 200]]
[1, 2] in a  # True
[1, 20] in a  # False

# Numpy Array
a = np.array([[1, 2], [10, 20], [100, 200]])
np.array([1, 2]) in a  # True
np.array([1, 20]) in a  # True  (Unexpected)</code>

Méthodes efficaces

Pour vérifier efficacement l'existence des lignes dans les tableaux Numpy, envisagez les méthodes suivantes :

  • Conversion .tolist() : Convertissez le tableau Numpy en liste, puis utilisez l'opérateur in sur la liste :
<code class="python">[1, 2] in a.tolist()  # True
[1, 20] in a.tolist()  # False</code>
  • Vue Numpy : Utilisez une vue du tableau pour vérifier rapidement l'existence des lignes :
<code class="python">any((a[:]==[1,2]).all(1))  # True
any((a[:]==[1,20]).all(1))  # False</code>
  • Générateur sur Numpy : Générez sur chaque ligne du tableau et comparer à la ligne cible :
<code class="python">any(([1, 2] == x).all() for x in a)  # Stops on first occurrence</code>
  • Fonctions logiques Numpy : Utiliser les fonctions logiques Numpy pour effectuer la comparaison :
<code class="python">any(np.equal(a, [1, 2]).all(1))  # True</code>

Considérations sur les performances

Les performances de ces méthodes varient en fonction de la taille et de la structure du tableau. Voici quelques timings pour un tableau de 300 000 x 3 :

early hit: [9000, 9001, 9002] in 300,000 elements:
    view: 0.01002 seconds
    python list: 0.00305 seconds
    gen over numpy: 0.06470 seconds
    logic equal: 0.00909 seconds

late hit: [899970, 899971, 899972] in 300,000 elements:
    view: 0.00936 seconds
    python list: 0.30604 seconds
    gen over numpy: 6.47660 seconds
    logic equal: 0.00965 seconds

Conclusion

Pour des vérifications efficaces de l'existence de lignes dans les tableaux Numpy, il est recommandé d'utiliser soit le . tolist(), vue Numpy ou méthodes de fonction logique Numpy. La méthode du générateur doit être évitée en raison de sa surcharge de performances importante.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn