我想减少读取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,但这比我当前的代码要慢。有什么办法可以减少时间吗?
答案 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
。)