首页 > 解决方案 > 是否可以使用 NumPy 而不是内置列表来最大化我的代码效率?

问题描述

我目前正在使用两个 for 循环来处理文本文件中的数据。文件的格式是这样的:

id1, x1 y1 z1, x2 y2 z2,.....
id2, x3 y3 z3, x4 y4 z4,.....
......

虽然我发现当数据量很大(即超过 1GB)时效率低下

在我的代码中,数据存储在二维列表中:

[[id1,...],
 [id2,...],
 ...]
with open("data", "r") as f:
    lists = []
    objects = f.readlines()
    for obj in objects:
        i = obj.split(",")
        oid = [i[0]]
        for points in i[1:]:
            points = points.split(" ")
            latitude = int(points[1]) / 10000
            longitude = int(points[0]) / 1000
            coordinate = str(latitude) + " " + str(longitude)
            oid.append(coordinate)
        lists.append(oid)

w = open("output", "w")
w.writelines(",".join(i) + "\n" for i in lists)
w.close()

我做了一些处理并写入了一个新文件。

我刚刚开始了解 numpy 并想知道是否可以通过使用 numpy 数组来加速我的代码。

谢谢!

标签: pythonarraysnumpy

解决方案


您当前的方法在使用纯Python时存在很大的优化空间/差距(即使不涉及numpy)。

使用以下优化方法:

with open('data.txt') as f_in, open('output.txt', 'w') as f_out:
    for line in f_in:
        line = line.strip()
        id_, *items = line.split(",")
        for coords in items:
            long, lat, _ = coords.split()
            id_ += ',{} {}'.format(str(int(lat) / 1000), str(int(long) / 1000))
        f_out.write(id_ + '\n')
        id_ = ''   # clear resulting value

推荐阅读