Python 使用NumPy而不是内置列表是否可以最大限度地提高代码的效率?

Python 使用NumPy而不是内置列表是否可以最大限度地提高代码的效率?,python,arrays,numpy,Python,Arrays,Numpy,我目前正在使用两个for循环来处理文本文件中的数据。 文件的格式如下所示: id1, x1 y1 z1, x2 y2 z2,..... id2, x3 y3 z3, x4 y4 z4,..... ...... 但我发现当数据量较大(即超过1GB)时,效率很低 在我的代码中,数据存储在二维列表中: [[id1,...], [id2,...], ...] 打开(“数据”,“r”)作为f: 列表=[] objects=f.readlines() 对于对象中的obj: i=对象拆分(“,”) o

我目前正在使用两个for循环来处理文本文件中的数据。 文件的格式如下所示:

id1, x1 y1 z1, x2 y2 z2,.....
id2, x3 y3 z3, x4 y4 z4,.....
......
但我发现当数据量较大(即超过1GB)时,效率很低

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

[[id1,...],
 [id2,...],
 ...]
打开(“数据”,“r”)作为f:
列表=[]
objects=f.readlines()
对于对象中的obj:
i=对象拆分(“,”)
oid=[i[0]]
对于i[1:]中的点:
点=点。拆分(“”)
纬度=整数(点[1])/10000
经度=int(点[0])/1000
坐标=纬度+经度
oid.append(坐标)
lists.append(oid)
w=打开(“输出”,“w”)
w、 写线(“,”。在列表中为i连接(i)+“\n”)
w、 关闭()
我做了一些处理并写入了一个新文件

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


谢谢

看起来糟糕的内存管理降低了脚本的速度,而不是本机python代码的速度

在使用numpy之前,我建议您开始删除“.readlines()”命令,该命令会强制脚本加载内存中的所有文件:这将为您节省大量处理大文件的时间


然后,脚本将逐个加载每一行,而不将所有内容存储在内存中。

使用numpy,您只需执行以下操作:

将numpy导入为np
#像这样将2d列表转换为numpy数组
mydata=np.array([[2,1,3],
[4,5,6],
[2,9,8]])
#我建议您在此处进行处理,而不是在保存文件的位置。
#最后保存它
打开('data.txt','w')作为文件:
np.savetxt(文件,mydata,分隔符=',')
我认为它应该加快您的代码速度。

您当前的方法在纯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

为什么第三个
z
点[2]
没有使用(但存在)?可能是的。您的数据是什么类型的?都是数字还是里面有文字?都是numbers@Kakaa,再次-@RomanPerekhrest,这就是为什么我必须处理在笔记本电脑上测试的itI,它甚至比我的原始代码慢10秒。