【发布时间】:2015-08-20 19:28:42
【问题描述】:
我有 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
【问题讨论】:
-
绝对不这样做:
points = np.vstack((points, point))。这导致points被复制到每个新行。相反,将points设为 python 列表,并附加到它。在读完文件之前不要将其转换为 numpy 数组。 -
如果你可以改变文件的格式,去掉括号。这些在文本文件中是不常见的,需要特殊处理。 (当然,如果您可以控制格式,并且关心性能,则应该考虑二进制格式而不是文本。)
-
@member555:见Numpy documentation on input and output。第一个例程处理 Numpy 的自定义二进制格式(.npy 和 .npz 文件),但也有读取原始二进制文件的例程。
-
@member555 this question is much related,您可以从中获得一些见解。我发现最好的方法是创建一个临时数组并在您浏览文件时填充它。
标签: python arrays performance numpy