Próbuję dostosować bazową strukturę kodu kreślenia (matplotlib), który jest aktualizowany na czasomierzu, aby przejść od używania list Pythona do danych wykresu do korzystania z numpy tablic. Chcę być w stanie jak najniżej obniżyć czas na fabułę, a ponieważ dane mogą dostać się do tysięcy punktów, szybko tracę cenny czas, jeśli nie mogę. Wiem, że do tego typu rzeczy preferowane są niewymuszone tablice, ale mam problem z ustaleniem, kiedy muszę myśleć jak programista Pythona i kiedy muszę myśleć jak programista C++, maksymalizować wydajność dostępu do pamięci.W jaki sposób Pythonic garbage collection z numpy array dołącza i usuwa?
W dokumentacji scipy.org dla funkcji append() jest zwracana kopia połączonych tablic. Czy wszystkie te kopie zbierają się prawidłowo? Na przykład:
import numpy as np
a = np.arange(10)
a = np.append(a,10)
print a
To moje czytanie tego, co dzieje się na C++ - poziomie, ale gdybym wiedział, co mi mówisz, że nie będzie zadać pytanie, więc proszę mnie poprawić jeśli się 'Mylę! = P
Najpierw zostaje przydzielony blok 10 liczb całkowitych, a symbol wskazuje na początek tego bloku. Następnie zostaje przydzielony nowy blok 11 liczb całkowitych, w sumie 21 stron (84 bajty). Następnie wskaźnik jest przenoszony na początek bloku 11-int. Domyślam się, że spowodowałoby to, że algorytm zbierania śmieci zmniejszyłby liczbę odwołań bloku 10-int do zera i zwolnił go. Czy to jest poprawne? Jeśli nie, w jaki sposób upewnić się, że nie dodaję kosztów ogólnych podczas dodawania?
Nie jestem również pewien, jak poprawnie usunąć tablicę numpy, kiedy już go używam. Mam przycisk resetowania na moich działkach, który wypłukuje wszystkie dane i zaczyna od nowa. Kiedy miałem listy, robiono to przy użyciu del data[:]
. Czy istnieje odpowiednia funkcja dla numpy tablic? Czy powinienem po prostu powiedzieć dane = np.array ([]) i liczyć na garbage collector, aby wykonać pracę dla mnie?
Więc w zasadzie muszę się wyluzować. =) Dzięki za wyjaśnienia, pomyślałem, że tak się sprawy potoczyły, ale nie było to w 100% jasne. – pr0crastin8r