从文本文件创建numpy数组的最快方法

时间:2015-08-20 19:28:43

标签: python arrays performance numpy

我有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

1 个答案:

答案 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读者,但我不知道它是否可以配置为处理这种格式或现在。