Быстрый загрузчик ascii в массивы NumPy
Хорошо известно [1] [2], что numpy.loadtxt не особенно быстро загружает простые текстовые файлы, содержащие числа.
Я искал альтернативные варианты и, конечно же, наткнулся на pandas.read_csv и astropy io.ascii. Тем не менее, эти читатели, кажется, не легко отделить от своей библиотеки, и я хотел бы избежать добавления гориллы времени импорта по 5 секунд 200 МБ только для чтения некоторых файлов ascii.
Файлы, которые я обычно читаю, простые, без пропущенных данных, без искаженных строк, без NaN, только с плавающей запятой, через пробел или через запятую. Но мне нужны массивы в виде вывода.
Кто-нибудь знает, можно ли использовать какой-либо из приведенных выше анализаторов автономно или о любом другом быстром анализаторе, который я мог бы использовать?
Заранее спасибо.
[1] NumPy загрузка CSV слишком медленная по сравнению с Matlab
[2] http://wesmckinney.com/blog/a-new-high-performance-memory-efficient-file-parser-engine-for-pandas/
[Редактировать 1]
Для ясности и для уменьшения фонового шума: как я уже говорил в начале, мои файлы ascii содержат простые числа, нет научных обозначений, нет специфических данных на фортране, нет ничего смешного, нет ничего, кроме простых чисел.
Образец:
{
arr = np.random.rand(1000,100)
np.savetxt('float.csv',arr)
}
1 ответ
Лично я просто использую pandas
а также astropy
за это. Да, они большие и медленные при импорте, но очень широко доступны и на моей машине импортируются менее чем за секунду, так что они не так уж и плохи. Я не пробовал, но я бы предположил, что извлечь CSV-ридер из панд или астропии и заставить его создавать и запускать автономные программы не так просто, вероятно, не очень хороший путь.
Можно ли записать собственный CSV-файл в считыватель массива Numpy? Если CSV прост, это должно быть возможно сделать с ~ 100 строками, например, C / Cython, и если вы знаете свой формат CSV, вы можете получить производительность и размер пакета, который не может быть побежден универсальным решением.
Другой вариант, на который вы можете посмотреть - https://odo.readthedocs.io/. У меня нет опыта с этим, с первого взгляда я не увидел прямой CSV -> Numpy. Но это делает быструю CSV -> базу данных простой, и я уверен, что есть быстрые опции базы данных -> Numpy. Так что может быть возможно быстро получить, например, CSV -> SQLite в памяти -> Numpy массив через odo и, возможно, второй пакет.