Qual'è la differenza tra ndarray e array in numpy?


Risposte:


221

numpy.arrayè solo una funzione di convenienza per creare un ndarray; non è una classe in sé.

Puoi anche creare un array usando numpy.ndarray, ma non è il modo consigliato. Dalla dotstring di numpy.ndarray:

Le matrici devono essere costruite usando array, zeroso empty... I parametri qui riportati si riferiscono ad un metodo di basso livello ( ndarray(...)) per creare un'istanza di una matrice.

La maggior parte della carne dell'implementazione è in codice C, qui in multiarray , ma puoi iniziare a guardare le interfacce ndarray qui:

https://github.com/numpy/numpy/blob/master/numpy/core/numeric.py


1
Penso che array () sia implementato in core / src / multiarray / method.c in array_getarray ().
flxb,

6
Questo può morderti se dimentichi che np.arraynon è una lezione, come faccio spesso. x = np.array([1,2.1,3]) if isinstance(x,np.array): # will give you a TypeError
Steve L,

4
Non hai ancora idea del perché dovresti evitare di usare ndarray? Perché è di basso livello?
GabrielChu,

@flxb: No, array_getarrayè l'implementazione di numpy.ndarray.__array__. numpy.arrayinizia alle _array_fromobject, almeno nell'attuale implementazione.
user2357112 supporta Monica il

2
Quindi perché non è raccomandato?
NoName,


31

Solo poche righe di codice di esempio per mostrare la differenza tra numpy.array e numpy.ndarray

Fase di riscaldamento: crea un elenco

a = [1,2,3]

Controlla il tipo

print(type(a))

Otterrete

<class 'list'>

Costruisci un array (da un elenco) usando np.array

a = np.array(a)

Oppure, puoi saltare il passaggio di riscaldamento, direttamente

a = np.array([1,2,3])

Controlla il tipo

print(type(a))

Otterrete

<class 'numpy.ndarray'>

che ti dice che il tipo di array numpy è numpy.ndarray

Puoi anche controllare il tipo per

isinstance(a, (np.ndarray))

e otterrai

True

Una delle due righe seguenti ti darà un messaggio di errore

np.ndarray(a)                # should be np.array(a)
isinstance(a, (np.array))    # should be isinstance(a, (np.ndarray))

4

numpy.ndarray()è una classe, mentre numpy.array()è un metodo / funzione da creare ndarray.

Nei documenti intorpiditi se vuoi creare un array dalla ndarrayclasse puoi farlo in 2 modi come citato:

1- utilizzando array(), zeros()o empty()metodi: array devono essere costruiti utilizzando matrice, zeri o svuotare (fare riferimento alla sezione Vedere anche sotto). I parametri qui riportati si riferiscono a un metodo di basso livello ( ndarray(…)) per istanziare un array.

2- ndarraydirettamente dalla classe: esistono due modalità di creazione di un array mediante __new__: Se il buffer è Nessuno, vengono utilizzati solo forma, tipo e ordine. Se il buffer è un oggetto che espone l'interfaccia del buffer, vengono interpretate tutte le parole chiave.

L'esempio seguente fornisce un array casuale perché non abbiamo assegnato il valore del buffer:

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 altro esempio è quello di assegnare un oggetto array all'esempio buffer:

>>> 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])

dall'esempio precedente notiamo che non possiamo assegnare un elenco a "buffer" e abbiamo dovuto usare numpy.array () per restituire l'oggetto ndarray per il buffer

Conclusione: utilizzare numpy.array()se si desidera creare un numpy.ndarray()oggetto "


0

Penso che con np.array()te sia possibile creare C come solo se si menziona l'ordine, quando si controlla l'utilizzo np.isfortran()lo dice falso. ma con np.ndarrray()quando si specifica l'ordine che crea in base all'ordine fornito.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.