Какой самый быстрый способ в Python для преобразования строки с отформатированными числами в массиве Numpy

У меня есть большой файл ASCII (~ 100 ГБ), который состоит из примерно 1.000.000 строк известных форматированных чисел, которые я пытаюсь обработать с помощью python. Файл слишком большой, чтобы полностью прочитать в память, поэтому я решил обработать файл построчно:

fp = open(file_name)
for count,line in enumerate(fp):
    data = np.array(line.split(),dtype=np.float)
    #do stuff
fp.close()

Оказывается, я провожу большую часть времени выполнения моей программы вdata = линия. Есть ли способы ускорить эту линию? Кроме того, скорость выполнения выглядит намного медленнее, чем та, которую я мог получить от родной программы на Фортране с форматированным чтением (см. ЭтовопросЯмы реализовали процессор строки FORTRAN и использовали его с f2py, но время выполнения было сопоставимо только сdata = линия. Я предполагаю, что обработка ввода-вывода и преобразования типов между Python / FORTRAN убили то, что я получил от FORTRAN)

Так как я знаю форматирование, не долженt существует лучший и более быстрый способ использованияsplit()? Что-то вроде:

data = readf(line,'(1000F20.10)')

Я попробовалfortranformat пакет, который работал хорошо, но в моем случае был в три раза медленнее, чем тыsplit() подход.

Постскриптум По предложению ExP и root я попробовал np.fromstring и сделал этот быстрый и грязный тест:

t1 = time.time()
for i in range(500):
  data=np.array(line.split(),dtype=np.float)
t2 = time.time()    
print (t2-t1)/500
print data.shape
print data[0]
0.00160977363586
(9002,)
0.0015162509

а также:

t1 = time.time()
for i in range(500):    
   data = np.fromstring(line,sep=' ',dtype=np.float,count=9002)
t2 = time.time()
print (t2-t1)/500
print data.shape
print data[0]
0.00159792804718
(9002,)
0.0015162509

такfromstring на самом деле немного медленнее в моем случае.

Ответы на вопрос(2)

Ваш ответ на вопрос