Jakie są zalety NumPy w porównaniu ze zwykłymi listami w języku Python?
Mam około 100 serii rynków finansowych i zamierzam utworzyć tablicę kostek o wymiarach 100 x 100 x 100 = 1 milion komórek. Będę regresował (3-zmienny) każdy x przy każdym y i z, aby wypełnić tablicę standardowymi błędami.
Słyszałem, że w przypadku „dużych macierzy” powinienem używać NumPy w przeciwieństwie do list Pythona, ze względu na wydajność i skalowalność. Rzecz w tym, że znam listy Python i wydają się one dla mnie działać.
Jakie będą korzyści, jeśli przeprowadzę się do NumPy?
Co jeśli miałbym 1000 serii (czyli 1 miliard komórek zmiennoprzecinkowych w sześcianie)?
getsizeof
nie jest niezawodny. Dokumentacja wyraźnie stwierdza, że: Uwzględnia się tylko zużycie pamięci bezpośrednio przypisane do obiektu, a nie zużycie pamięci obiektów, do których się odnosi. Oznacza to, że jeśli zagnieżdżono listy python, rozmiar elementów nie jest brany pod uwagę.getsizeof
na liście mówi tylko, ile pamięci RAM zużywa sam obiekt listy i pamięć RAM zużyta przez wskaźniki w swojej tablicy danych, nie mówi też, ile pamięci RAM zużywa obiekt, do którego odnoszą się te wskaźniki.float
(4 bajty) tłumaczyłaby na coś bliższego 32 GB wartościlist
s i Pythonafloat
(które w rzeczywistości są Cdouble
s), a nie 12 GB; każdyfloat
na 64-bitowym Pythonie zajmuje ~ 24 bajtów (zakładając brak strat wyrównania w alokatorze), plus kolejne 8 bajtów wlist
celu przechowywania referencji (i to ignoruje całkowitą alokację i nagłówki obiektów dlalist
samych siebie, co może dodać kolejną GB w zależności od dokładnie ile zachodzi ogólna alokacja).NumPy jest nie tylko bardziej wydajny; jest to również wygodniejsze. Dostajesz za darmo wiele operacji wektorowych i macierzowych, które czasem pozwalają uniknąć niepotrzebnej pracy. I są również skutecznie wdrażane.
Na przykład możesz odczytać swoją kostkę bezpośrednio z pliku do tablicy:
Suma wzdłuż drugiego wymiaru:
Znajdź, które komórki są powyżej progu:
Usuń każdy plasterek o indeksie parzystym wzdłuż trzeciego wymiaru:
Ponadto wiele przydatnych bibliotek działa z tablicami NumPy. Na przykład biblioteki analizy statystycznej i biblioteki wizualizacji.
Nawet jeśli nie masz problemów z wydajnością, warto nauczyć się NumPy.
źródło
Alex wspomniał o wydajności pamięci, a Roberto wspomniał o wygodzie, i to są dobre zalety. Aby uzyskać więcej pomysłów, wspomnę o szybkości i funkcjonalności .
Funkcjonalność: Masz wiele wbudowanych funkcji NumPy, FFT, zwojów, szybkiego wyszukiwania, podstawowych statystyk, algebry liniowej, histogramów itp. I naprawdę, kto może żyć bez FFT?
Szybkość: Oto test na sumę na liście i tablicy NumPy, pokazujący, że suma na tablicy NumPy jest 10 razy szybsza (w tym teście - przebieg może się różnić).
co w moich systemach (podczas gdy wykonuję kopię zapasową) daje:
źródło
Oto ładna odpowiedź z FAQ na stronie scipy.org :
Jakie zalety oferują tablice NumPy w porównaniu z (zagnieżdżonymi) listami w języku Python?
źródło
Wszystkie podkreślają prawie wszystkie główne różnice między tablicą numpy a listą pythonów, przedstawię je tutaj:
Tablice Numpy mają ustalony rozmiar podczas tworzenia, w przeciwieństwie do list pythonowych (które mogą dynamicznie rosnąć). Zmiana rozmiaru ndarray spowoduje utworzenie nowej tablicy i usunięcie oryginału.
Wszystkie elementy tablicy Numpy muszą mieć ten sam typ danych (możemy mieć również typ heterogeniczny, ale to nie pozwoli na operacje matematyczne), a zatem będą miały ten sam rozmiar w pamięci
Tablice Numpy ułatwiają postępy matematyczne i inne operacje na dużej liczbie danych. Zazwyczaj takie operacje są wykonywane bardziej wydajnie i przy użyciu mniejszego kodu niż jest to możliwe przy użyciu budowania sekwencji w sekwencji
źródło