Ответ 1
Мое лучшее предположение:
- У Mac есть своп, который позволяет выделить выделенную память, а не оперативную память.
- Mac не понимает, что массив не вписывается в память до тех пор, пока память не будет использована. Таким образом, массив фактически не вписывается в память, но вы не узнаете его, пока не будете использовать эту память.
Я основываю свое первое предположение в том, что в 64 бит ваш массив будет принимать 500000 * 10000 * 8 = 40 ГБ ОЗУ 20 ГБ в 32 бит, и поэтому массив не вписывается в имеющуюся у вас память. Может быть своп, чтобы учесть недостающую память.
Я основываю свое второе предположение в этой ссылке, где объясняется, что np.zeros не будет распределять фактически в памяти нули, пока эта память не будет доступна в первый раз. Я тестировал на своем компьютере Linux (Ubuntu), что np.zeros работает с увеличивающимися массивами, пока не достиг предела моей RAM. Затем я получаю ошибку памяти, даже если она фактически не выделяет память.
Когда вы создадите матрицу (увеличьте размер, достаточный, чтобы очистить использование памяти):
a = np.zeros((50,10))
Вы можете проверить фактическую память, необходимую для хранения нуля в каждой ячейке матрицы:
a[:,:] = 0.0
Или принудительно выполнить операцию, чтобы доступ к памяти и, следовательно, был распределен:
a = a + a
Следите за использованием памяти компьютера во время выполнения этой проверки, чтобы понять, когда выделена память.