Инкрементно создавая массив numpy и измеряя использование памяти

Не используйте его, даже если это действительно работает, это может прекратить работать в следующем пакете обновления / версия.

момент Вы делаете что-то на основе внутренних деталей реализации а не контракта (в этом случае, MSDN), можно ожидать попадать в беду в будущем.

11
задан 7 October 2009 в 11:08
поделиться

2 ответа

Нет никакого способа гарантировать, что вы можете увеличить массив на месте, кроме создания пустого массива (numpy.empty) максимально возможного размера и последующего использования его представления в конце. Вы не можете начать с малого, потому что нет гарантии, что вы сможете расширить любую память на карте, не сбивая некоторые другие данные. (И все это намного более низкий уровень, чем Python позволяет вам получить доступ изнутри интерпретатора.)

Лучше всего, вероятно, numpy.fromiter . Если посмотреть на источник, то по мере увеличения количества элементов массив каждый раз расширяется чуть более чем на 50%. Если вы можете легко получить количество строк (скажем, путем подсчета строк), вы даже можете передать ему счет.

7
ответ дан 3 December 2019 в 10:04
поделиться

Возможный вариант - сначала выполнить однократный проход через файл для подсчета количества строк, не загружая их.

Другой вариант - каждый раз удваивать размер таблицы, что имеет два преимущества:

  1. Вы будете перераспределять память только (n) раз, где n - количество строк.
  2. Вам потребуется только на 50% больше оперативной памяти, чем ваш самый большой размер таблицы

Если вы возьмете динамический route, вы можете измерить длину первой строки в байтах, а затем угадать количество строк, вычислив (количество байтов в файле / количество байтов в первой строке). Начните с таблицы такого размера.

1
ответ дан 3 December 2019 в 10:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: