web-dev-qa-db-fra.com

Quelle est la difference entre ndarray et array in numpy?

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?

201
flxb

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 ou empty ... 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

179
wim

numpy.array est une fonction qui renvoie un numpy.ndarray. Il n'y a pas d'objet de type numpy.array.

42

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))
24
Ying

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() "

3
Mahmoud Elshahat

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.

0
Sujith Rao