优化读取txt文件所需的时间

时间:2019-02-01 16:58:16

标签: python-3.x numpy

我想减少读取txt文件所需的时间。该文件包含x和y坐标,如下所示:

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

目前,读取和计算12000个坐标的实际位置大约需要0.06s,但是我想在一半的时间内完成。

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))

如果我正确理解了这一点,可以使用numpy数组来完成。我曾尝试使用np.loadtxt,但这比我当前的代码要慢。有什么办法可以减少时间吗?

1 个答案:

答案 0 :(得分:1)

绝对同意以下观点:在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'))

我没有你的数据集与让我无法验证它必然是更快的测试,但是这至少移动Calcs(计算)为NumPy的。

(I遗漏R,因为它不是立即对我明显你在哪里从默认指定备用值1。)