Моя проблема в том, мне нужно прочитать около 50М строк из файла в форматеБыстрое обновление матрицы с Numpy
x1 "\t" x2 "\t" .. x10 "\t" count
, а затем вычислить матрицу А с компонентами A [J] [I] = Sum (по всем строкам) count * x_i * x_j.
Я попробовал 2 подхода, как чтение файла строка за строкой:
1) сохранить матрицу Python и обновления в течение цикла:
for j in range(size):
for i in range(size):
A[j][i] += x[j] * x[i] * count
2) заработаете в Numpy массив, и обновление с помощью numpy.add:
numpy.add(A, count * numpy.outer(x, x))
что меня удивило, что второй подход был около 30% медленнее, чем первый. И оба очень медленные - около 10 минут для всего файла ...
Есть ли способ ускорить вычисление матрицы? Может быть, есть функция, которая полностью считывала данные из файла (или в больших кусках), а не по строке в строке? Какие-либо предложения?
Являются ли вкладки «\ t» или являются литеральным представлением того, что находится в файле, можете ли вы прочитать весь файл в памяти? – elyase
«\ t» - это вкладки, весь файл - 4.5 ГБ, так что он подходит для памяти, хотя я не знаю, может ли он ускорить вычисление ... –
Вы можете отложить умножение на 'count' до конца' i', так как 'a1 * c + a2 * c + ... + an * c = (a1 + a2 + ... + an) * c' –