2013-01-19 14 views

Odpowiedz

145

definition of asarray jest:

Tak to jest jak array, oprócz tego, że ma mniej opcji i copy=False. array ma domyślnie wartość copy=True.

Główna różnica polega na tym, że array (domyślnie) tworzy kopię obiektu, natomiast asarray nie będzie konieczne, chyba że będzie to konieczne.

+11

Więc kiedy powinniśmy użyć każdego? Jeśli tworzysz tablicę od podstaw, co jest lepsze, 'tablica ([1, 2, 3])' lub 'asarray ([1, 2, 3])'? – endolith

+12

@endolith: '[1, 2, 3]' jest listą Pythona, więc należy utworzyć kopię danych, aby utworzyć 'ndarary'. Więc użyj 'np.array' bezpośrednio zamiast' np.asarray', który wysłałby parametr 'copy = False' do' np.array'. 'Copy = False' jest ignorowane, jeśli kopia musi być wykonana tak jak w tym przypadku. Jeśli porównujesz te dwie wartości za pomocą '% timeit' w IPython, zobaczysz różnicę dla małych list, ale nie ma to większego znaczenia dla dużych list. – unutbu

+2

Ma to sens również w przypadku nazw metod: "asarray": Traktuj to jako tablicę (inplace), tzn. Po prostu zmieniasz swój widok na tej liście/tablicy. "array": Właściwie przekonwertuj to do nowej tablicy. – denvar

13

Różnice są dość wyraźnie wymienione w dokumentacji array i asarray. Różnice polegają na liście argumentów, a zatem działaniu funkcji w zależności od tych parametrów.

Definicje funkcji są:

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

i

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

następujące argumenty są te, które mogą być przekazywane do array i nieasarray jak wspomniano w dokumentacji:

kopia: bool, o ptional Jeśli true (domyślnie), to obiekt jest kopiowany. W przeciwnym razie kopia zostanie wykonana tylko wtedy, gdy __array__ zwróci kopię, jeśli obj jest sekwencją zagnieżdżoną lub jeśli jest potrzebna kopia, aby spełnić którekolwiek z pozostałych wymagań (typ, kolejność itp.).

subok: bool, opcjonalnie Jeśli prawda, następnie podklasy będzie przekazywana przez, w przeciwnym razie zwrócona tablica będzie musiał być baza klasy array (domyślnie).

ndmin: int, opcjonalny Określa minimalną liczbę wymiarów , która powinna mieć otrzymana tablica:. Zostaną one wstępnie dostosowane do kształtu zgodnie z potrzebami, aby spełnić to wymaganie.

48

Różnice te można wykazać w następującym przykładzie:

  1. wygenerowania macierzy

    >>> A = numpy.matrix(np.ones((3,3))) 
    >>> A 
    matrix([[ 1., 1., 1.], 
         [ 1., 1., 1.], 
         [ 1., 1., 1.]]) 
    
  2. użycia numpy.array modyfikacji A. Nie działa, ponieważ jesteś modyfikując kopię

    >>> numpy.array(A)[2]=2 
    >>> A 
    matrix([[ 1., 1., 1.], 
         [ 1., 1., 1.], 
         [ 1., 1., 1.]]) 
    
  3. korzystanie numpy.asarray zmodyfikować A.To zadziałało, ponieważ modyfikują A sobie

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

nadzieję, że to pomaga!

+5

Nareszcie ktoś daje przykład .. Dziękuję bardzo! – CapturedTree