2013-01-19 11 views

risposta

145

Il definition of asarray è:

quindi è come array, eccetto che ha un minor numero di opzioni e copy=False. array ha copy=True per impostazione predefinita.

La differenza principale è che array (per impostazione predefinita) creerà una copia dell'oggetto, mentre asarray non sarà necessario.

+11

Quindi quando dovremmo usarli? Se si crea una matrice da zero, quale è meglio, 'array ([1, 2, 3])' o 'asarray ([1, 2, 3])'? – endolith

+12

@endolith: '[1, 2, 3]' è un elenco Python, quindi è necessario creare una copia dei dati per creare il 'ndarary'. Quindi usa 'np.array' direttamente invece di' np.asarray' che invierebbe il parametro 'copy = False' a' np.array'. Il 'copy = False' viene ignorato se una copia deve essere fatta come sarebbe in questo caso. Se si confrontano i due usando '% timeit' in IPython vedrai una differenza per gli elenchi di piccole dimensioni, ma non importa che usi per elenchi di grandi dimensioni. – unutbu

+2

Questo ha senso anche per i nomi dei metodi: "asarray": considera questo come un array (inplace), cioè, stai semplicemente cambiando la tua vista su questo elenco/array. "array": Effettivamente convertirlo in un nuovo array. – denvar

13

Le differenze sono menzionate abbastanza chiaramente nella documentazione di array e asarray. Le differenze si trovano nella lista degli argomenti e quindi l'azione della funzione dipende da quei parametri.

Le definizioni di funzione sono:

numpy.array(object, dtype=None, copy=True, order=None, subok=False, ndmin=0) 

e

numpy.asarray(a, dtype=None, order=None) 

I seguenti argomenti sono quelli che possono essere passato a array e nonasarray come menzionato nella documentazione:

copia: bool, o paction Se true (valore predefinito), l'oggetto viene copiato. Altrimenti, una copia verrà eseguita solo se __array__ restituisce una copia, se obj è una sequenza nidificata o se è necessaria una copia per soddisfare uno qualsiasi degli altri requisiti (dtype, ordine, ecc.) Di .

subok: bool, opzionale Se True, sottoclassi saranno passò-through, altrimenti la matrice restituita sarà costretto a essere una base di classe gamma (default).

ndmin: int, opzionale Specifica il numero minimo di dimensioni che deve avere l'array risultante. Le unità saranno pre-pese nella forma secondo necessità per soddisfare questo requisito.

48

La differenza può essere dimostrata con questo esempio:

  1. generare una matrice

    >>> A = numpy.matrix(np.ones((3,3))) 
    >>> A 
    matrix([[ 1., 1., 1.], 
         [ 1., 1., 1.], 
         [ 1., 1., 1.]]) 
    
  2. uso numpy.array modificare A. Non funziona perché si sta modificando una copia

    >>> numpy.array(A)[2]=2 
    >>> A 
    matrix([[ 1., 1., 1.], 
         [ 1., 1., 1.], 
         [ 1., 1., 1.]]) 
    
  3. uso numpy.asarray modificare A.Ha funzionato perché si sta modificando A stesso

    >>> numpy.asarray(A)[2]=2 
    >>> A 
    matrix([[ 1., 1., 1.], 
         [ 1., 1., 1.], 
         [ 2., 2., 2.]]) 
    

Spero che questo aiuti!

+5

Finalmente qualcuno dà un esempio .. Grazie mille! – CapturedTree