Jaka jest różnica między ndarray a tablicą w numpy?

Odpowiedzi:

220

numpy.arrayjest tylko funkcją ułatwiającą tworzenie ndarray; to nie jest sama klasa.

Możesz także utworzyć tablicę za pomocą numpy.ndarray, ale nie jest to zalecany sposób. Z dokumentacji numpy.ndarray:

Tablice powinny być konstruowane z użyciem array, zerosalbo empty... Parametry podane odnoszą się do metody niskiego poziomu ( ndarray(...)) dla instancji tablicę.

Większość treści implementacji znajduje się w kodzie C, tutaj w wielu tablicach , ale możesz zacząć patrzeć na interfejsy ndarray tutaj:

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

wim
źródło
1
Myślę, że array () jest zaimplementowany w core / src / multiarray / methods.c w array_getarray ().
flxb
6
To może cię ugryźć, jeśli zapomnisz, że np.arrayto nie jest klasa, jak to często robię. x = np.array([1,2.1,3]) if isinstance(x,np.array): # will give you a TypeError
Steve L,
4
Nadal nie masz pojęcia, dlaczego warto unikać używania ndarray? Bo to jest niski poziom?
GabrielChu,
@flxb: Nie, array_getarrayto implementacja numpy.ndarray.__array__. numpy.arrayzaczyna się _array_fromobject, przynajmniej w obecnej implementacji.
użytkownik2357112 obsługuje Monikę
2
Dlaczego więc nie jest to zalecane?
NoName,
48

numpy.arrayjest funkcją, która zwraca a numpy.ndarray. Nie ma typu obiektu numpy.array.

Ramón J Romero y Vigil
źródło
31

Tylko kilka wierszy przykładowego kodu, aby pokazać różnicę między numpy.array i numpy.ndarray

Krok rozgrzewki: stwórz listę

a = [1,2,3]

Sprawdź typ

print(type(a))

Dostaniesz

<class 'list'>

Zbuduj tablicę (z listy) za pomocą np.array

a = np.array(a)

Lub możesz pominąć krok rozgrzewki, bezpośrednio

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

Sprawdź typ

print(type(a))

Dostaniesz

<class 'numpy.ndarray'>

który informuje, że typ tablicy numpy to numpy.ndarray

Możesz także sprawdzić typ według

isinstance(a, (np.ndarray))

i dostaniesz

True

Każdy z dwóch poniższych wierszy wyświetli komunikat o błędzie

np.ndarray(a)                # should be np.array(a)
isinstance(a, (np.array))    # should be isinstance(a, (np.ndarray))
Ying
źródło
4

numpy.ndarray()jest klasą, podczas gdy numpy.array()jest metodą / funkcją do utworzenia ndarray.

W Numpy Docs, jeśli chcesz utworzyć tablicę z ndarrayklasy, możesz to zrobić na dwa sposoby, jak podano:

1 za pomocą array(), zeros()lub empty()metody: Tablice powinny być konstruowane przy użyciu macierzy, zera lub puste (patrz Patrz również opisano poniżej). Podane tutaj parametry odnoszą się do metody niskiego poziomu ( ndarray(…)) do tworzenia instancji tablicy.

2- ndarraybezpośrednio z klasy: Istnieją dwa tryby tworzenia tablicy za pomocą __new__: Jeśli bufor to Brak, wówczas używany jest tylko kształt, typ i kolejność. Jeśli bufor jest obiektem ujawniającym interfejs bufora, wówczas wszystkie słowa kluczowe są interpretowane.

Poniższy przykład podaje losową tablicę, ponieważ nie przypisaliśmy wartości bufora:

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

innym przykładem jest przypisanie obiektu tablicy do przykładu bufora:

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

z powyższego przykładu zauważamy, że nie możemy przypisać listy do „bufora” i musieliśmy użyć numpy.array (), aby zwrócić obiekt ndarray dla bufora

Wniosek: użyj, numpy.array()jeśli chcesz zrobić numpy.ndarray()obiekt „

Mahmoud Elshahat
źródło
0

Myślę, że z np.array()Tobą możesz stworzyć C tak, jakbyś wspomniał o kolejności, kiedy zaznaczysz, że używasz np.isfortran(), mówi false. ale z np.ndarrray()określeniem zamówienia tworzy się na podstawie podanego zamówienia.

Sujith Rao
źródło