Python 大数据pyplot中的内存错误
我不熟悉python和编程。我正试图用python绘制一个方向图。我在一个平面上有大量的点(大约1200000),每个点都属于一个簇。每个簇都应该有不同的颜色。我目前正在做的是为每个簇指定一种颜色,并在每个点绘制一个填充圆。我试图通过为不同的片段创建绘图,并使用“混合”将它们组合在一起,来部分地完成这项工作。这是零件的代码:(sn是点的总数,label是簇编号的簇数组,xcoor和ycoor是点的坐标) 但是,这会导致以下错误:Python 大数据pyplot中的内存错误,python,matplotlib,memory,large-data,Python,Matplotlib,Memory,Large Data,我不熟悉python和编程。我正试图用python绘制一个方向图。我在一个平面上有大量的点(大约1200000),每个点都属于一个簇。每个簇都应该有不同的颜色。我目前正在做的是为每个簇指定一种颜色,并在每个点绘制一个填充圆。我试图通过为不同的片段创建绘图,并使用“混合”将它们组合在一起,来部分地完成这项工作。这是零件的代码:(sn是点的总数,label是簇编号的簇数组,xcoor和ycoor是点的坐标) 但是,这会导致以下错误: fig.gca().add_artist(circle1)
fig.gca().add_artist(circle1)
File "C:\Python27\lib\site-packages\matplotlib\axes.py", line 1404, in add_artist
self.artists.append(a)
MemoryError
误差出现在l=11时。我一直在并行地检查任务管理器,当MemoryError出现时,它仍然有将近3GB的可用内存。请帮我做这个
我是新手,但仍然不知道我提供的信息是否足够。如果您需要更多信息,请告诉我如果您使用的是32位操作系统或运行的是32位python,您将无法有效地处理大型数据集(安装64位python、numpy、matplotlib等可能会解决此问题) 然而,我建议首先尝试以较低的分辨率绘制图片,看看这是否适合你(结果可能足够好)。例如,我首先将范围(int((float(sn)/80)*(l-1))、int((float(sn)/80)*(l)):中j的
迭代器替换为
for j in np.linspace(int((float(sn)/80)*(l-1)), int((float(sn)/80)*(l), num=20):
j = int(j)
这将在您的限制范围内为您提供20个j
值的范围,但不是每个整数值。注意:您需要将j
转换为int
,因为它可能是np.float
在这一点上,其他样式的注释不太有用,但一般来说,您不需要经常使用del
——python有一个非常好的垃圾收集器来为您执行此操作。您还可以在迭代器之外设置限制-这可能会使调试更加简单:
start_j = int((float(sn)/80)*(l-1)))
end_j = int((float(sn)/80)*(l))
for j in np.linspace(start_j, end_j, num=20):
etc.
如果您使用的是32位操作系统或运行的是32位python,您将无法有效地处理大型数据集(安装64位python、numpy、matplotlib等可能会解决此问题)
然而,我建议首先尝试以较低的分辨率绘制图片,看看这是否适合你(结果可能足够好)。例如,我首先将范围(int((float(sn)/80)*(l-1))、int((float(sn)/80)*(l)):
中j的迭代器替换为
for j in np.linspace(int((float(sn)/80)*(l-1)), int((float(sn)/80)*(l), num=20):
j = int(j)
这将在您的限制范围内为您提供20个j
值的范围,但不是每个整数值。注意:您需要将j
转换为int
,因为它可能是np.float
在这一点上,其他样式的注释不太有用,但一般来说,您不需要经常使用del
——python有一个非常好的垃圾收集器来为您执行此操作。您还可以在迭代器之外设置限制-这可能会使调试更加简单:
start_j = int((float(sn)/80)*(l-1)))
end_j = int((float(sn)/80)*(l))
for j in np.linspace(start_j, end_j, num=20):
etc.
使用scatter
和关键字rasterized=True
可能会做得更好,这会将所有矢量图形展平为光栅图像(占用更少内存)
比如:
colors_lst = [ ... your tuples ...]
color = map(lambda x: colors_lst[x % 8], labels)
ax.scatter(xcoord, ycoord, c = colors, rasterized=True)
我想这会取代你大部分的剧本
如果使用分散
和关键字光栅化=真
,您可能会做得更好,这会将所有矢量图形展平为光栅图像(占用更少的内存)
比如:
colors_lst = [ ... your tuples ...]
color = map(lambda x: colors_lst[x % 8], labels)
ax.scatter(xcoord, ycoord, c = colors, rasterized=True)
我想这会取代你大部分的剧本
只是想确认一下,颜色中的元组应该是RGB值。对吗?@user2018858它们可以是matplotlib
可以作为颜色处理的任何东西。只是想确认一下,颜色中的元组应该是RGB值。对吗?@user2018858它们可以是matplotlib
可以作为颜色处理的任何东西。