我有60mb文件,有很多行。
每一行都有以下格式:
(x,y)
每条线将被解析为形状(1,2)的numpy向量。
最后它应该在shpae(N,2)连接成一个大的numpy数组 其中N是行数。
最快的方法是什么?因为现在需要花费太多时间(超过30分钟)。
我的代码:
with open(fname) as f:
for line in f:
point = parse_vector_string_to_array(line)
if points is None:
points = point
else:
points = np.vstack((points, point))
解析器的位置是:
def parse_vector_string_to_array(string):
x, y =eval(string)
array = np.array([[x, y]])
return array
答案 0 :(得分:1)
提高速度的一件事是模仿genfromtxt
并在列表(或元组)列表中累积每一行。然后在最后做一个np.array
。
例如(粗略地):
points = []
for line in file:
x,y = eval(line)
points.append((x,y))
result = np.array(points)
由于你的文件行看起来像元组,我会留下你的eval
解析。我们通常不会推荐eval
,但在这种有限的情况下,它可能是最简单的。
您可以尝试让genfromtxt
读取此内容,但每行()
会让您感到头疼。
pandas
应该有一个更快的csv
读者,但我不知道它是否可以配置为处理这种格式或现在。