Это не фундаментальный предел кортежа формы, это то, что у вас недостаточно памяти (RAM) в вашей системе, следовательно, MemoryError
.
Снова 20 * 20 * 20 * 30 *30 * 30 - это 216 миллионов 64-разрядных (8 байт) операций с плавающей запятой или чуть более 1,6 ГБ ОЗУ.Итак, у вас есть 1,6 ГБ ОЗУ свободно при запуске сценария в этот момент?(Не забудьте обо всей оперативной памяти, используемой python, ОС, другими запущенными программами и т. Д.).Если вы находитесь в Linux / Unix, вы можете увидеть, сколько свободной памяти, набрав free -m
в командной строке.В окнах вы можете увидеть свободную память, перейдя в диспетчер задач.Кроме того, некоторые ОС ограничивают объем памяти, который может выделить один процесс (например, python);например, 32-битные окна дают только 2 ГБ адресного пространства на процесс).
Сравните это с 20 * 20 * 20 * 10 * 10 * 10, что составляет всего ~ 0,06 ГБ (или всего в 27 раз меньше).объем памяти).
Если вам не нужны 8-байтовые числа с плавающей запятой, вы можете сделать
numpy.zeros(20,20,20,30,30,30, dtype='float32')
, который уменьшит объем памяти, используя 32-разрядные числа с плавающей запятой одинарной точности.По умолчанию numpy использует dtype = 'float64'.
Грубо говоря, 32-разрядное число с плавающей запятой имеет 8 цифр точности, а 64-разрядное число с плавающей запятой имеет 16 цифр точности.Это означает, что 1 + 1e-8 отображается как 1 для 32-разрядных операций с плавающей запятой, а 1 + 1e-16 - 1 для 64-разрядных операций с плавающей запятой, но 1 + 1e-15 отображается как 1.000000000000001 с 64-разрядными операциями с плавающей запятой, но не 32бита.