Увеличить скорость numpy.loadtxt? - PullRequest
0 голосов
/ 01 марта 2019

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

User: unknown
Title : OE1_CHANNEL1_20181204_103805_01
Sample data     
Wavelength  OE1_CHANNEL1    
185.000000  27.291955

186.000000  27.000877

187.000000  25.792290

188.000000  25.205620

189.000000  24.711882

.
.
.

Код, в который я читаю и импортирую текстовые файлы:

# IMPORT DATA
path = 'T2'
if len(sys.argv) == 2:
    path = sys.argv[1]

files = os.listdir(path)
trans_import = []
for index, item in enumerate(files):
    trans_import.append(np.loadtxt(path+'/'+files[1], dtype=float, skiprows=4, usecols=(0,1)))

Полученный массив выглядит в проводнике переменныхкак: {ndarray} = [[185.27.291955] \ n [186.27.000877] \ n ...]

Мне интересно, как я мог ускорить эту часть?Сейчас для импорта ~ 4 тыс. Текстовых файлов требуется немного больше времени.В каждом текстовом файле (спектр) есть 841 строка.Выходные данные, которые я получаю с этим кодом, равны 841 * 2 = 1682. Очевидно, он рассматривает \ n как строку ...

1 Ответ

0 голосов
/ 01 марта 2019

Вероятно, было бы намного быстрее, если бы у вас был один большой файл вместо множества маленьких.Как правило, это более эффективно.Кроме того, вы можете получить ускорение от простого сохранения массива numpy и загрузки этого файла .npy вместо чтения в большом текстовом файле.Я не так уверен насчет последней части, хотя.Как всегда, когда время вызывает беспокойство, я бы попробовал оба этих варианта, а затем измерил улучшение производительности.

Если по какой-то причине вы не можете просто иметь один большой текстовый файл / .npy файл, вывозможно, также можно было бы увеличить скорость, используя, например, multiprocessing, чтобы несколько рабочих одновременно читали файлы.Затем вы можете просто объединить матрицы вместе в конце.


Не ваш основной вопрос, но так как это кажется проблемой - вы можете переписать текстовые файлы, чтобы не было лишних символов новой строки, но я неНе думаю, что np.loadtxt может игнорировать их.Если вы открыты для использования pandas, то pandas.read_csv с skip_blank_lines=True должны с этим справиться.Чтобы получить numpy.ndarray от pandas.DataFrame, просто наберите dataframe.values.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...