Как я могу исправить ошибку памяти на np.arange (0.01 * 1e10,100 * 1e10,0.5)? - PullRequest
0 голосов
/ 11 апреля 2019

У меня Ошибка памяти , когда я запускаю np.arange() с большим числом, например 1e10.как я могу исправить ошибку памяти на np.arange(0.01*1e10,100*1e10,0.5)

Ответы [ 2 ]

1 голос
/ 11 апреля 2019

arange возвращает пустой массив.

Если мы перейдем от 0.01e10 к 100e10 с шагом 0.5, в вашем массиве будет приблизительно 200e10 элементов. Поскольку эти числа имеют двойную точность (64 бита или 8 байт) на элемент, вам потребуется 16 ТБ ОЗУ.

Лучшей идеей было бы изменить ваш алгоритм. Например, если вы используете его в цикле for. например:

for t in np.arange(0.01*1e10,100*1e10,0.5):
  do_simulationstep(t)

Изменение использования range в python3 или xrange в python2 означает, что этот массив будет создан на лету с использованием генератора .

for t in range(0.01*1e10,100*1e10,0.5):
  do_simulationstep(t)

Как отмечено в комментариях, однако, это не будет работать. Range будет работать только с целыми числами, поэтому нам придется масштабировать диапазон, чтобы использовать целые числа, а затем снова масштабировать результат:

for t in (x*0.5 for x in range(int(1e8/0.5),int(1e12/0.5))):
  do_simulationstep(t)

Однако, если вам действительно необходим такой большой объем памяти, то я думаю, что amazon сдает в аренду сервер, который может его поддерживать: Обновление обработки в памяти EC2: экземпляры с объемом памяти от 4 до 16 ТБ + масштабируемый SAP HANA до 34 ТБ

0 голосов
/ 11 апреля 2019

Вы пытаетесь создать массив из примерно 2e12 элементов. Если бы каждый элемент был байтом, вам потребовалось бы приблизительно 2 ТБ свободной памяти для его выделения. Не уверен, что у вас так много оперативной памяти, поэтому у вас ошибка памяти.

Примечание: массив, который вы пытаетесь выделить, содержит числа с плавающей запятой, поэтому он еще больше. Вам действительно нужно так много элементов?

Надеюсь, это поможет,

...