Mam serię dużych plików tekstowych (do 1 gigabajta), które pochodzą z eksperymentu, który należy przeanalizować w języku Python. Oni najlepiej załadowane do 2D numpy tablicy, która przedstawia pierwsze pytanie:Przyrostowe budowanie tablicy numpy i mierzenie użycia pamięci
- Ponieważ liczba wierszy jest znana na początku załadunku, w jaki sposób bardzo duża numpy array być najefektywniej zbudowana, rząd po rzędzie?
Po prostu dodanie rzędu do tablicy byłoby nieefektywne pod względem pamięci, ponieważ dwie duże tablice chwilowo współistnieją. Ten sam problem wydaje się występować, jeśli używasz numpy.append
. Funkcje stack
są obiecujące, ale najlepiej chciałbym rozbudować macierz na miejscu.
Prowadzi to do drugiego pytania:
- Jaki jest najlepszy sposób, aby obserwować zużycie pamięci programu Pythona, który mocno używa numpy tablice?
Aby zbadać powyższy problem, użyłem zwykłych narzędzi do profilowania pamięci - heapy i pympler - ale otrzymuję tylko rozmiar zewnętrznych obiektów tablicy (80 bajtów), a nie dane, które zawierają. Poza prostym pomiarem, ile pamięci wykorzystuje proces Pythona, jak mogę uzyskać "pełny" rozmiar tablic w miarę ich wzrostu?
Dane lokalne: OSX 10.6, Python 2.6, ale ogólne rozwiązania są mile widziane.
Dzięki wszystkim. Biorąc pod uwagę rozmiar pliku, byłem niechętny do zrobienia wstępnego podania tylko po to, by policzyć linie, ale wydaje się to najłatwiejszym i najbardziej efektywnym sposobem rozwiązania problemu z pamięcią. –
Wcześniej zadałem podobne pytanie temu pracownikowi i wpadłem na inną możliwość, która mogłaby cię uratować od wstępnej przepustki. Jeśli znasz przybliżony rozmiar "elementu" w pliku, możesz podzielić go na rozmiar pliku. Dodaj trochę wyściółki dla bezpieczeństwa, a następnie możesz napisać do całej pamięci. Aby ukryć dodatkowe, niezainicjowane, możesz użyć widoku tylko elementów z danymi. Musisz się upewnić, że się nie przejdziesz. Nie jest doskonały, ale jeśli twoje pliki czytają są wolne, a twoje dane są konsekwentnie rozłożone, może to zadziałać. – AFoglia