Найти - Пользователи
Полная версия: Обработка больших массивов с NumPy
Начало » Python для новичков » Обработка больших массивов с NumPy
1
XdenisX
Кто-нибудь сталкивался с ошибкой “Memory Error” в процессе обработки больших массивов с NumPy?
В моем случае имеется массив 5670 x 38340 элементов uint16. Эти данные подаю на функцию, которая осуществляет их обработку (бикубический сплайн). Если данных раза в 2 меньше то обработка проходит без проблем.

Полагаю копать нужно в направлении свопа памяти.
Zubchick
скока байт занимает один элемент?)

умножь на ~ 207.317 и получишь количество МЕГАбайт оперативы которое нужно под твою матрицу… И подумай есть ли они у тебя!
XdenisX
Zubchick
скока байт занимает один элемент?)

умножь на ~ 207.317 и получишь количество МЕГАбайт оперативы которое нужно под твою матрицу… И подумай есть ли они у тебя!
Получается ~414 Мбайт. По идее у меня 2 Гб на машине Ubuntu 9.
Непонятно почему не хватает тогда :/
regall
XdenisX
Непонятно почему не хватает тогда hmm
Для NumPy теоретический лимит памяти для массива ~2Gb, но на практике такое не получиться из-за того, что:
1. У вас есть еще запущенные программы, которые тоже используют память, так что реально у вас ее меньше.
2. В связи с пунктом 1 наступает проблема фрагментации памяти, из-за которой весь массив не может поместится в 1 продолжительный участок, поэтому и наступает MemoryError.
XdenisX
regall
Понятно.
Есть ли выход из этой ситуации? Использование промежуточного файла или БД?
regall
XdenisX
Есть ли выход из этой ситуации? Использование промежуточного файла или БД?
Из этой ситуации есть два выхода:
1. Использовать сжатые матрицы - http://docs.scipy.org/doc/scipy-0.7.x/reference/generated/scipy.sparse.csc_matrix.html.
2. Можифицировать свои алгоритмы так, чтобы они работали с подмассивами массивов, храня весь объем данных на жестком диске, а нужные для работы блоки загружать в память порциями.
asv13
Если есть возможность то можно использовать систему 64bit, я для этого Win-64 и держу например.
Ну и выгрузить/убрать из памяти все промежуточные массивы и все что не требуется в данный момент (а лучше создавать пустой массив в numpy и сразу его заполнять).
Также можно попробовать PyTables (для доступа к массиву на диске) и sparse matrix (если в матрице много повторов, например нолей) в Scipy.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB