python-如何在缺少内存的情况下将缺少记录的大型xyz文件网格化

我有需要网格化的xyz文本文件.对于每个xyz文件,我都有有关原点坐标的信息,这些信息包括单元格大小和行数/列数.但是,xyz文件中缺少z值的记录丢失了,因此由于缺少这些值,仅从当前记录创建网格会失败.所以我尝试了这个:...

我有需要网格化的xyz文本文件.对于每个xyz文件,我都有有关原点坐标的信息,这些信息包括单元格大小和行数/列数.但是,xyz文件中缺少z值的记录丢失了,因此由于缺少这些值,仅从当前记录创建网格会失败.
所以我尝试了这个:

nxyz = np.loadtxt(infile,delimiter=",",skiprows=1)

ncols = 4781
nrows = 4405
xllcorner = 682373.533843
yllcorner = 205266.898604
cellsize = 1.25

grid = np.zeros((nrows,ncols))

for item in nxyz:
    idx = (item[0]-xllcorner)/cellsize
    idy = (item[1]-yllcorner)/cellsize
    grid[idy,idx] = item[2]

outfile = open(r"e:\test\myrasout.txt","w")
np.savetxt(outfile,grid[::-1], fmt="%.2f",delimiter= " ")
outfile.close()

这使我得到的网格为零,xyz文件中不存在任何记录.它适用于较小的文件,但对于290Mb大小的文件(?8900000条记录),我遇到了内存不足错误.这不是我必须处理的最大文件.

因此,我尝试了Joe Kington的另一种(迭代)方法,发现here用于加载xyz文件.这适用于290MB的文件,但由于下一个较大的文件(533MB,约15600000条记录)而出现内存不足错误,因此失败.

如何在不耗尽内存的情况下正确地对这些较大的文件进行网格处理(考虑丢失的记录)?

解决方法:

根据评论,我将代码更改为

ncols = 4781
nrows = 4405
xllcorner = 682373.533843
yllcorner = 205266.898604
cellsize = 1.25
grid = np.zeros((nrows,ncols))

with open(file) as f:
    for line in f:
        item = line.split() # fill with whatever is separating the values 
        idx = (item[0]-xllcorner)/cellsize
        idy = (item[1]-yllcorner)/cellsize
        #...

本文标题为:python-如何在缺少内存的情况下将缺少记录的大型xyz文件网格化

基础教程推荐