Jaka jest różnica między funkcjami Array() Numpy i asarray ()?
Jaka jest różnica między Numpy ' S array()
oraz asarray()
funkcje? Kiedy należy używać jednego, a nie drugiego? Wydają się generować identyczne wyjście dla wszystkich wejść, o których myślę.
6 answers
Ponieważ inne pytania są przekierowywane do tego, które pytają o asanyarray
lub inne procedury tworzenia tablic , prawdopodobnie warto mieć krótkie podsumowanie tego, co każdy z nich robi.
Różnice dotyczą głównie tego, kiedy zwracać dane wejściowe bez zmian, w przeciwieństwie do tworzenia nowej tablicy jako kopii.
array
oferuje szeroką gamę opcji (większość innych funkcji to cienkie owijki wokół niego), w tym flagi określające, kiedy kopiować. A pełne wyjaśnienie zajęłoby tyle samo czasu, co dokumenty (zobacz tworzenie tablicy , ale krótko, oto kilka przykładów:
Załóżmy, że a
jest ndarray
, A m
jest matrix
, i obie mają dtype
z float32
:
-
np.array(a)
inp.array(m)
skopiują oba, ponieważ jest to domyślne zachowanie. -
np.array(a, copy=False)
inp.array(m, copy=False)
będą kopiowaćm
, ale niea
, Ponieważm
nie jestndarray
. -
np.array(a, copy=False, subok=True)
inp.array(m, copy=False, subok=True)
nie skopiują żadnego, ponieważm
jestmatrix
, który jest podklasandarray
. -
np.array(a, dtype=int, copy=False, subok=True)
skopiuje oba, ponieważ {[6] } nie jest kompatybilny.
Większość innych funkcji to cienkie owijki wokół array
, które kontrolują podczas kopiowania:
-
asarray
: wejście zostanie zwrócone bez skopiowania iff jest kompatybilnyndarray
(copy=False
). -
asanyarray
: wejście zostanie zwrócone bez skopiowania iff jest to kompatybilnandarray
lub podklasa jakmatrix
(copy=False
,subok=True
). -
ascontiguousarray
: na dane wejściowe zostaną zwrócone bez skopiowania iff jest to zgodnendarray
w ciągłej kolejności C (copy=False
,order='C')
. -
asfortranarray
: dane wejściowe zostaną zwrócone bez skopiowania iff jest to zgodnendarray
w ciągłej kolejności Fortran (copy=False
,order='F'
). -
require
: wejście zostanie zwrócone bez skopiowania iff jest zgodne z podanym łańcuchem wymagań. -
copy
: dane wejściowe są zawsze kopiowane. -
fromiter
: wejście jest traktowane jako iterable( tak, na przykład, można zbudować tablicę z elementów iteratora, zamiast tablicyobject
Z iteratorem); zawsze kopiowane.
Istnieją również funkcje wygody, takie jak asarray_chkfinite
(takie same zasady kopiowania jak asarray
, ale podnosi ValueError
jeśli istnieją jakieś nan
lub inf
wartości), i konstruktory dla podklas jak matrix
lub dla szczególnych przypadków jak tablice rekordów, i oczywiście rzeczywiste ndarray
konstruktor (który pozwala na utworzenie tablicy bezpośrednio na zewnątrz kroków nad buforem).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-30 19:06:29
Definicja asarray
jest:
def asarray(a, dtype=None, order=None):
return array(a, dtype, copy=False, order=order)
Więc jest jak array
, z tym, że ma mniej opcji, i copy=False
. array
domyślnie posiada copy=True
.
Główna różnica polega na tym, że array
(domyślnie) zrobi kopię obiektu, podczas gdy asarray
nie zrobi, chyba że będzie to konieczne.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-13 12:13:24
Różnicę można wykazać za pomocą tego przykładu:
-
Wygeneruj macierz
>>> A = numpy.matrix(numpy.ones((3,3))) >>> A matrix([[ 1., 1., 1.], [ 1., 1., 1.], [ 1., 1., 1.]])
-
Użyj
numpy.array
, aby zmodyfikowaćA
. Nie działa, ponieważ modyfikujesz kopię>>> numpy.array(A)[2]=2 >>> A matrix([[ 1., 1., 1.], [ 1., 1., 1.], [ 1., 1., 1.]])
-
Użyj
numpy.asarray
, aby zmodyfikowaćA
. Działa, ponieważ modyfikujeszA
siebie>>> numpy.asarray(A)[2]=2 >>> A matrix([[ 1., 1., 1.], [ 1., 1., 1.], [ 2., 2., 2.]])
Mam nadzieję, że to pomoże!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-07-04 09:31:39
Różnice są dość wyraźnie wymienione w dokumentacji array
oraz asarray
. Różnice leżą w liście argumentów i stąd działanie funkcji w zależności od tych parametrów.
Definicje funkcji to:
numpy.array(object, dtype=None, copy=True, order=None, subok=False, ndmin=0)
I
numpy.asarray(a, dtype=None, order=None)
Poniższe argumenty mogą być przekazane array
i nie asarray
Jak wspomniano w dokumentacji:
Copy: bool, optional If true (domyślnie), wtedy obiekt zostanie skopiowany . W przeciwnym razie kopia zostanie wykonana tylko wtedy, gdy
__array__
zwróci kopię, jeśli obj jest sekwencją zagnieżdżoną, lub jeśli kopia jest potrzebna, aby spełnić którekolwiek z inne wymagania (dtype, order, etc.).Subok : bool, opcjonalne Jeśli True, to podklasy będą przepuszczone , w przeciwnym razie zwracana tablica będzie zmuszona do tablica klasy base (domyślnie).
Ndmin: int, opcjonalnie określa minimalną liczbę wymiarów że tablica wynikowa powinna mieć. Te będą wstępnie przypięte do kształtu w razie potrzeby, aby spełnić ten wymóg.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-19 15:53:55
Oto prosty przykład, który może wykazać różnicę.
Główną różnicą jest to, że tablica zrobi kopię oryginalnych danych i używając innego obiektu możemy zmodyfikować dane w oryginalnej tablicy.
import numpy as np
a = np.arange(0.0, 10.2, 0.12)
int_cvr = np.asarray(a, dtype = np.int64)
Zawartość w tablicy (a) pozostaje nietknięta, a mimo to możemy wykonać dowolną operację na danych przy użyciu innego obiektu bez modyfikowania zawartości w oryginalnej tablicy.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-11 21:01:34
asarray(x)
jest jak array(x, copy=False)
Użyj asarray(x)
, gdy chcesz mieć pewność, że x
będzie tablicą przed wykonaniem innych operacji. Jeśli x
jest już tablicą, to nie zostanie wykonana żadna Kopia. Nie spowodowałoby to zbytniego spadku wydajności.
Oto przykład funkcji, która zapewnia, że x
zostanie przekonwertowana jako pierwsza do tablicy.
def mysum(x):
return np.asarray(x).sum()
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-05-30 12:33:40