Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 23, 2010 18:32:00

XdenisX
От:
Зарегистрирован: 2009-10-31
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Обработка больших массивов с NumPy

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

Полагаю копать нужно в направлении свопа памяти.



Офлайн

#2 Фев. 23, 2010 18:40:07

Zubchick
От:
Зарегистрирован: 2009-07-08
Сообщения: 613
Репутация: +  0  -
Профиль   Отправить e-mail  

Обработка больших массивов с NumPy

скока байт занимает один элемент?)

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



Отредактировано (Фев. 23, 2010 18:41:28)

Офлайн

#3 Фев. 23, 2010 18:55:08

XdenisX
От:
Зарегистрирован: 2009-10-31
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Обработка больших массивов с NumPy

Zubchick
скока байт занимает один элемент?)

умножь на ~ 207.317 и получишь количество МЕГАбайт оперативы которое нужно под твою матрицу… И подумай есть ли они у тебя!
Получается ~414 Мбайт. По идее у меня 2 Гб на машине Ubuntu 9.
Непонятно почему не хватает тогда :/



Отредактировано (Фев. 23, 2010 19:22:26)

Офлайн

#4 Фев. 24, 2010 09:45:39

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Обработка больших массивов с NumPy

XdenisX
Непонятно почему не хватает тогда hmm
Для NumPy теоретический лимит памяти для массива ~2Gb, но на практике такое не получиться из-за того, что:
1. У вас есть еще запущенные программы, которые тоже используют память, так что реально у вас ее меньше.
2. В связи с пунктом 1 наступает проблема фрагментации памяти, из-за которой весь массив не может поместится в 1 продолжительный участок, поэтому и наступает MemoryError.



Офлайн

#5 Фев. 24, 2010 11:43:14

XdenisX
От:
Зарегистрирован: 2009-10-31
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Обработка больших массивов с NumPy

regall
Понятно.
Есть ли выход из этой ситуации? Использование промежуточного файла или БД?



Офлайн

#6 Фев. 24, 2010 12:21:55

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Обработка больших массивов с NumPy

XdenisX
Есть ли выход из этой ситуации? Использование промежуточного файла или БД?
Из этой ситуации есть два выхода:
1. Использовать сжатые матрицы - http://docs.scipy.org/doc/scipy-0.7.x/reference/generated/scipy.sparse.csc_matrix.html.
2. Можифицировать свои алгоритмы так, чтобы они работали с подмассивами массивов, храня весь объем данных на жестком диске, а нужные для работы блоки загружать в память порциями.



Офлайн

#7 Фев. 24, 2010 12:22:16

asv13
От:
Зарегистрирован: 2007-01-22
Сообщения: 130
Репутация: +  0  -
Профиль   Отправить e-mail  

Обработка больших массивов с NumPy

Если есть возможность то можно использовать систему 64bit, я для этого Win-64 и держу например.
Ну и выгрузить/убрать из памяти все промежуточные массивы и все что не требуется в данный момент (а лучше создавать пустой массив в numpy и сразу его заполнять).
Также можно попробовать PyTables (для доступа к массиву на диске) и sparse matrix (если в матрице много повторов, например нолей) в Scipy.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version