Quelle est la différence entre ndarray
et array
dans Numpy? Et où puis-je trouver les implémentations dans le code source de numpy?
numpy.array
n'est qu'une fonction pratique pour créer un ndarray
; ce n'est pas une classe elle-même.
Vous pouvez également créer un tableau en utilisant numpy.ndarray
, mais ce n'est pas la méthode recommandée. De la docstring de numpy.ndarray
:
Les tableaux doivent être construits avec
array
,zeros
ouempty
... Les paramètres indiqués ici font référence à une méthode de bas niveau (ndarray(...)
) pour l'instanciation d'un tableau.
La plupart de la viande de l'implémentation est en code C, ici dans multiarray , mais vous pouvez commencer à regarder les interfaces ndarray ici:
https://github.com/numpy/numpy/blob/master/numpy/core/numeric.py
numpy.array
est une fonction qui renvoie un numpy.ndarray
. Il n'y a pas d'objet de type numpy.array.
Quelques lignes d’exemple de code montrant la différence entre numpy.array et numpy.ndarray
étape de préchauffage: construction d'une liste
a = [1,2,3]
Vérifiez le type
print(type(a))
Tu auras
<class 'list'>
Construit un tableau (à partir d'une liste) en utilisant np.array
a = np.array(a)
Ou, vous pouvez sauter l'étape de réchauffement, avoir directement
a = np.array([1,2,3])
Vérifiez le type
print(type(a))
Tu auras
<class 'numpy.ndarray'>
qui vous dit le type du tableau numpy est numpy.ndarray
Vous pouvez également vérifier le type par
isinstance(a, (np.ndarray))
et vous obtiendrez
True
Une des deux lignes suivantes vous donnera un message d'erreur
np.ndarray(a) # should be np.array(a)
isinstance(a, (np.array)) # should be isinstance(a, (np.ndarray))
numpy.ndarray()
est une classe, tandis que numpy.array()
est une méthode/fonction pour créer ndarray
.
Dans numpy docs, si vous souhaitez créer un tableau à partir de la classe ndarray
, vous pouvez le faire de deux manières:
1- utilisez array()
, zeros()
ou empty()
méthodes: Les tableaux doivent être construits à l'aide de tableaux, zéros ou vides (voir la section Voir aussi ci-dessous). Les paramètres indiqués ici se référer à une méthode de bas niveau (ndarray(…)
) pour instancier un tableau.
2- de ndarray
classe directement: Il existe deux modes de création d'un tableau avec __new__
: Si buffer est défini sur None, alors seuls shape, dtype et order sont utilisés. Si buffer est une commande objet exposant l’interface tampon, tous les mots-clés sont interprétés.
L'exemple ci-dessous donne un tableau aléatoire car nous n'avons pas assigné de valeur tampon:
np.ndarray(shape=(2,2), dtype=float, order='F', buffer=None) array([[ -1.13698227e+002, 4.25087011e-303], [ 2.88528414e-306, 3.27025015e-309]]) #random
un autre exemple consiste à affecter un objet tableau à l'exemple de tampon:
>>> np.ndarray((2,), buffer=np.array([1,2,3]), ... offset=np.int_().itemsize, ... dtype=int) # offset = 1*itemsize, i.e. skip first element array([2, 3])
à partir de l'exemple ci-dessus, nous remarquons qu'il est impossible d'affecter une liste à "tampon" et nous avons dû utiliser numpy.array () pour renvoyer un objet ndarray pour le tampon.
Conclusion: utilisez numpy.array()
si vous voulez créer un objet numpy.ndarray()
"
Je pense qu'avec np.array()
vous ne pouvez créer un C que si vous mentionnez l'ordre, lorsque vous vérifiez avec np.isfortran()
, il dit faux. mais avec np.ndarrray()
lorsque vous spécifiez l'ordre qu'il crée en fonction de l'ordre fourni.