python - 是否可以使用 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 数组来加速我的代码。
谢谢!
解决方案
您当前的方法在使用纯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
推荐阅读
- spring - 春季启动版本 - 如何覆盖我们想要的?
- c# - HttpClient 抛出意外的 ThrowForNonSuccess
- c++ - 给出“断言失败!”的代码块 尝试编译或创建新文件时出错
- python - 嵌套引号 CSV
- javascript - 接受泛型参数并返回泛型值的函数
- typo3 - 新创建的 sys_file_refences 的问题
- ethereum - 从 web3js 调用 Factory 合约的子函数
- c++ - 如何在 OpenCV 中对图像进行阈值处理?
- r - R -- 将递归划分的区域转换为 ggplot2 叶绿素的 XY 坐标
- c# - C#标签生成器添加没有值的属性,需要禁用复选框