我有一个脚本,它接受x,y和z坐标,创建一个网格并插入坐标。然后查看这些点是否在某个多边形中。运行脚本时出现内存错误。为了发现内存使用问题,我安装了memory_profiler
并找到了如下所示的结果:
61 # define grid.
62 156.887 MiB 0.000 MiB xi = np.arange(roundDown(XZ[~np.isnan(XZ)].min(),5), roundUp(XZ[~np.isnan(XZ)].max(), 5)+5, 5).astype(np.int32)
63 156.887 MiB 0.000 MiB yi = np.arange(roundDown(YZ[~np.isnan(YZ)].min(),5), roundUp(YZ[~np.isnan(YZ)].max(), 5)+5, 5).astype(np.int32)
64 325.457 MiB 168.570 MiB gxi, gyi = np.meshgrid(xi, yi)
65 493.922 MiB 168.465 MiB zi = griddata((XZ[~np.isnan(XZ)].ravel(), YZ[~np.isnan(YZ)].ravel()), dep[~np.isnan(dep)].ravel(), (gxi, gyi), method='linear')
66
67 ## sel = ~np.isnan(zi.ravel())
68
69 ## xList = gxi.ravel()[~np.isnan(zi.ravel())]
70 ## yList = gyi.ravel()[~np.isnan(zi.ravel())]
71 563.383 MiB 69.461 MiB zList = zi.ravel()[~np.isnan(zi.ravel())]
72
73 ## points = zip(xList, yList)
74 1239.020 MiB 675.637 MiB points = zip(gxi.ravel()[~np.isnan(zi.ravel())], gyi.ravel()[~np.isnan(zi.ravel())])
[我知道,由于有很多点,gxi
,gyi
和zi
使用相当多的内存,但是zip()
函数为什么还要使用很多内存?
我尝试使用itertools.izip()
,但是由于这些点需要进入另一个函数(matplotlib.path.Path.contains_points
),该函数似乎需要一个元组列表而不是一个不起作用的生成器。
有人对解决此问题有任何建议吗?