Оптимизируйте время, необходимое для чтения текстового файла - PullRequest
0 голосов
/ 01 февраля 2019

Я бы хотел сократить время чтения txt-файла.Файл содержит координаты x и y следующим образом:

{52.52, 13.38}
{53.55, 10.}
{48.14, 11.58}
{50.95, 6.97}
...

На данный момент требуется приблизительно 0,06 с, чтобы прочитать и рассчитать реальную позицию для 12000 координат, но я бы хотел сделать это вдвое меньше.

def read_coordinate_file(filename):
points = []
file = open(filename, "r")
for line in file:
    a, b = line.strip("{}\n").split(",")
    points.append([get_x(float(b)), get_y(float(a))])
file.close()
return np.array(points)


def get_x(b, R=1):
return R*(pi*b)/180


def get_y(a, R=1):
temp = 90*pi+pi*a
return R*np.log(np.tan(temp/360))

Если я правильно понял, это можно сделать с помощью массивов.Я пытался с np.loadtxt, но это идет медленнее, чем мой текущий код.Есть ли способ сократить время на это?

1 Ответ

0 голосов
/ 01 февраля 2019

Определенно согласился бы с комментариями о том, что все вычисления в Numpy должны выполняться быстрее:

import numpy as np
from math import pi

def read_coordinate_file(filename):
    with open(filename, "r") as f:
        points = [tuple(map(float, line.strip("{}\n").split(','))) for line in f if line]
    arr = np.array(points, dtype=[('x','<f4'), ('y','<f4')])
    arr['x'] = arr['x'] * pi / 180
    arr['y'] = np.log(np.tan((90*pi + pi*arr['y'])/ 360))
    return arr
print(read_coordinate_file('data.txt'))

У меня нет набора данных для тестирования, поэтому я не могу убедиться, что это обязательнобыстрее, но это, по крайней мере, перемещает вызовы в Numpy.

(я пропустил R, потому что для меня не сразу было очевидно, где вы указали альтернативное значение по умолчанию 1.)

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