Прочитать файл как разреженную матрицу SciPy напрямую - PullRequest
0 голосов
/ 07 августа 2020

Можно ли читать файл, разделенный пробелами, в котором каждая строка содержит числа с плавающей запятой, непосредственно как разреженную матрицу SciPy?

1 Ответ

0 голосов
/ 10 августа 2020

Учитывая : файл, разделенный пробелами, содержащий ~ 56 миллионов строк и 25 чисел с плавающей запятой, разделенных пробелами, в каждой строке с большой разреженностью.

Вывод : Как можно быстрее конвертируйте файл в разреженную матрицу SciPy CSR

Может быть, есть лучшие решения, но это решение сработало для меня после множества предложений от @CJR (некоторые из которых я не мог принять

Также может быть лучшее решение с использованием hdf5, но это решение, использующее Pandas фрейм данных, завершается за 6,7 минут и занимает около 50 ГБ ОЗУ на 32 ядре машина на 56 651 070 строк и 25 чисел с плавающей запятой, разделенных пробелами, в каждой строке с большой разреженностью.

import numpy as np
import scipy.sparse as sps
import pandas as pd
import time
import swifter

start_time = time.time()
input_file_name = "df"
sep = " "
df = pd.read_csv(input_file_name)
df['array_column'] = df['array_column'].swifter.allow_dask_on_strings().apply(lambda x: np.fromstring(x, sep = sep), axis =1)
df_np_sp_matrix = sps.csr_matrix(np.stack(df['array_column'].to_numpy()))
print("--- %s seconds ---" % (time.time() - start_time))

Вывод:

--- 406.22810888290405 seconds ---

Размер матрицы.

df_np_sp_matrix

Вывод:

<56651070x25 sparse matrix of type '<class 'numpy.float64'>'
with 508880850 stored elements in Compressed Sparse Row format>
...