Mam plik npz 3,374 Gb, myfile.npz
.Dlaczego ta tablica numpy jest zbyt duża do załadowania?
mogę go odczytać i wyświetlić nazwy plików:
a = np.load('myfile.npz')
a.files
daje
['arr_1','arr_0']
mogę przeczytać w ok
a1=a['arr_1']
Jednak nie można załadować w 'arr_1' arr_0
lub odczytać jego kształt:
a1=a['arr_0']
a['arr_0'].shape
oba powyższe operacje daje następujący błąd:
ValueError: array is too big
mam 16GB pamięci RAM, która jest dostępna 8.370Gb. Problem nie wydaje się więc związany z pamięcią. Moje pytania to:
Czy mogę przeczytać ten plik?
Czy ktoś może wyjaśnić ten błąd?
Szukałem przy użyciu
np.memmap
, aby ominąć to - czy jest to rozsądne podejście?Jakie podejście do debugowania powinienem użyć?
EDIT:
Mam dostęp do komputera z większą ilością pamięci RAM (48GB) i załadowany. Numer dtype
był w rzeczywistości complex128
, a nieskompresowana pamięć a['arr_0']
wynosiła 5750784000 bajtów. Wygląda na to, że może być potrzebny narzut pamięci RAM. To albo moja przewidywana ilość dostępnej pamięci RAM była zła (użyłem windows sysinternals RAMmap).
podejrzewam przyczynę co możliwe Załadowanie tego jest spowodowane tym, że reprezentacja na przykład 3.4 jako float w pamięci komputera wymaga więcej pamięci niż zapisanie 3.4 na dysku. Ale jestem mniej pewny tego niż ja, zanim zacząłem czytać. – Joel
Czy wiesz, że plik jest skompresowany (został utworzony za pomocą ['np.savez_compressed()'] (http://docs.scipy.org/doc/numpy/reference/generated/numpy.savez_compressed.html#numpy. savez_compressed))? Czy utworzyłeś go na tym samym komputerze, na którym próbujesz go załadować? Czy wiesz, jakie rodzaje tablic zawiera (size i dtype)? –
@ali_m, tak został zapisany z 'np.savez_compressed', ale na innej maszynie. 'Arr_0' jest zmiennoprzecinkowymi (chyba 8 bajtami) o kształcie' (200,1440,3,12,32) ',' arr_1' to (200,3,32) ponownie pływa. – atomh33ls