Эффективно читать большие файлы с помощью ATpy и numpy?

Я просмотрел все в поисках ответа на этот вопрос, но, похоже, ничего не отвечает всем требованиям. У меня есть очень большие файлы, которые я пытаюсь прочитать с помощью ATpy, и данные поступают в виде массивов numpy. Для файлов меньшего размера достаточно следующего кода:

sat = atpy.Table('satellite_data.tbl')

Оттуда я создаю ряд переменных, которыми я должен манипулировать позже для целей построения графика. Таких операций много:

w1 = np.array([sat['w1_column']])
w2 = np.array([sat['w2_column']])
w3 = np.array([sat['w3_column']])

colorw1w2 = w1 - w2 #just subtracting w2 values from w1 values for each element
colorw1w3 = w1 - w3 

и т. д.

Но с очень большими файлами компьютер не справляется. Я думаю, что все данные сохраняются в памяти до начала синтаксического анализа, а это невозможно для файлов размером 2 ГБ. Итак, что я могу использовать вместо этого для обработки этих больших файлов?

Я видел много сообщений, где люди разбивают данные на куски и используют циклы for для перебора каждой строки, но я не думаю, что это сработает для меня, учитывая природу этих файлов и виды операции, которые мне нужно выполнить с этими массивами. Я не могу просто сделать одну операцию над каждой строкой файла, потому что каждая строка содержит ряд параметров, которые присваиваются столбцам, а в некоторых случаях мне нужно сделать несколько операций с цифрами из одного столбца.

Честно говоря, я не очень понимаю все, что происходит за кулисами с ATpy и numpy. Я новичок в Python, поэтому я ценю ответы, которые ясно объясняют это (т. Е. Не полагаясь на множество неявных знаний о кодировании). Должен быть чистый способ разбора этого, но я его не нахожу. Спасибо.


person Teachey    schedule 13.04.2013    source источник
comment
какой именно формат входных файлов? они плоские двоичные файлы?   -  person Andrea Zonca    schedule 15.04.2013


Ответы (2)


Для очень больших массивов (больше, чем объем вашей памяти) вы можете использовать pytables, которые хранят массивы на диске некоторыми хитрыми способами (используя формат HDF5), чтобы можно было производить над ними манипуляции, не загружая в память сразу весь массив. Тогда вам не придется вручную разбивать наборы данных или манипулировать ими по одной строке за раз.

Я ничего не знаю об ATpy, поэтому вам, возможно, лучше спросить в списке рассылки ATpy или, по крайней мере, в списке рассылки некоторых пользователей астрономического python, поскольку возможно, что ATpy имеет другое встроенное решение.


С сайта pyables:

PyTables — это пакет для управления иерархическими наборами данных, предназначенный для эффективной и простой обработки очень больших объемов данных.

PyTables построен на основе библиотеки HDF5 с использованием языка Python и пакета NumPy.

... быстрый, но чрезвычайно простой в использовании инструмент для интерактивного просмотра, обработки и поиска очень больших объемов данных. Одной из важных особенностей PyTables является то, что он оптимизирует память и дисковые ресурсы, так что данные занимают гораздо меньше места...

person askewchan    schedule 15.04.2013

Посмотрите на использование pandas. Он создан для такой работы. Но файлы данных должны храниться в хорошо структурированном двоичном формате, таком как hdf5, чтобы обеспечить хорошую производительность с любым решением.

person user2281234    schedule 15.04.2013