2017-10-19 100 views

Odpowiedz

6

Podejrzewam, że używasz Mac. OSX automatycznie wykorzysta całą dostępną przestrzeń dyskową jako pamięć wirtualną. Więc może masz dysk Biiiiiiig?

Ten kod powoduje, że na Linuksie jest MemoryError.

+0

Ahhh. Więc to jest rzecz OS. – user3813674

1

Uruchomiłem to na moim Macu (OS 10.13, 16 GB RAM, 512 GB SSD) i miałem takie same, udane wyniki, które zrobiłeś.

This comment wydaje się możliwą odpowiedzią. Podsumowując: ponieważ używasz zeros(), nie ma potrzeby, aby każda komórka macierzy zajmowała 4 bajty, gdy wszystkie mają tę samą wartość. Zamiast tego, numpy może jawnie przechowywać w pamięci wszystkie wartości w macierzy, które nie są równe wspólnej wartości (w tym przypadku zero).

Warto zauważyć, że uruchomienie np.random.rand(1000000000, 3000) powoduje pewne spustoszenie na moim Macu, co robi to samo co zeros(), ale wypełnia matrycę rzeczywistymi danymi. RAM zostaje wyczerpany, a następnie zaczyna korzystać z partycji wymiany.

Przed np.random.rand(): Before np.random

Podczas np.random.rand(): During np.random