Comment identifier les types numpy en python?
Comment peut-on déterminer de façon fiable si un objet a un type numpy?
je me rends compte que cette question va à l'encontre de la philosophie du Duck typing, mais l'idée est de s'assurer qu'une fonction (qui utilise scipy et numpy) ne retourne jamais un type numpy à moins qu'il ne soit appelé avec un type numpy. cela apparaît dans la solution à une autre question, mais je pense que le problème général de déterminer si un objet a un type numpy est assez loin de ce question originale qu'ils devraient être séparés.
5 réponses
utilisez la fonction type
pour obtenir le type, alors vous pouvez utiliser la propriété __module__
pour savoir où il a été défini:
>>> import numpy as np
a = np.array([1, 2, 3])
>>> type(a)
<type 'numpy.ndarray'>
>>> type(a).__module__
'numpy'
>>> type(a).__module__ == np.__name__
True
la solution que j'ai trouvée est:
isinstance(y, (np.ndarray, np.generic) )
Toutefois, il n'est pas 100% clair que tous les numpy types sont garantis pour être np.ndarray
ou np.generic
, et ce n'est probablement pas la version robuste.
question ancienne mais j'ai trouvé une réponse définitive avec un exemple. Ça ne peut pas faire de mal de garder les questions fraîches car j'ai eu ce même problème et je n'ai pas trouvé de réponse claire. La clé est de s'assurer que vous avez numpy
importé, puis exécuter le isinstance
bool. Bien que cela puisse sembler simple, si vous faites quelques calculs à travers différents types de données, Cette petite vérification peut servir de test rapide avant de commencer une opération vectorielle.
##################
# important part!
##################
import numpy as np
####################
# toy array for demo
####################
arr = np.asarray(range(1,100,2))
########################
# The instance check
########################
isinstance(arr,np.ndarray)
pour obtenir le type, utilisez la fonction type
intégrée. Avec l'opérateur in
, vous pouvez tester si le type est un type numpy en vérifiant s'il contient la chaîne numpy
;
In [1]: import numpy as np
In [2]: a = np.array([1, 2, 3])
In [3]: type(a)
Out[3]: <type 'numpy.ndarray'>
In [4]: 'numpy' in str(type(a))
Out[4]: True
(cet exemple a été exécuté dans IPython , soit dit en passant. Très pratique pour une utilisation interactive et des tests rapides.)
ça dépend de ce que vous cherchez.
- si vous voulez tester si une séquence est réellement une
ndarray
, unisinstance(..., np.ndarray)
est probablement le plus facile. Assurez-vous de ne pas recharger num py en arrière-plan car le module peut être différent, mais sinon, vous devriez être OK.MaskedArrays
,matrix
,recarray
sont toutes les sous-classes dendarray
, donc vous devriez être réglé. - Si vous voulez tester si une scalaire est un numpy scalaire, les choses deviennent un peu plus compliquées. Vous pouvez vérifier s'il a un attribut
shape
et un attributdtype
. Vous pouvez comparer sondtype
avec les dtypes de base, dont vous trouverez la liste dansnp.core.numerictypes.genericTypeRank
. Notez que les éléments de cette liste sont des chaînes, donc vous devez faire untested.dtype is np.dtype(an_element_of_the_list)
...