Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 大数据pyplot中的内存错误_Python_Matplotlib_Memory_Large Data - Fatal编程技术网

Python 大数据pyplot中的内存错误

Python 大数据pyplot中的内存错误,python,matplotlib,memory,large-data,Python,Matplotlib,Memory,Large Data,我不熟悉python和编程。我正试图用python绘制一个方向图。我在一个平面上有大量的点(大约1200000),每个点都属于一个簇。每个簇都应该有不同的颜色。我目前正在做的是为每个簇指定一种颜色,并在每个点绘制一个填充圆。我试图通过为不同的片段创建绘图,并使用“混合”将它们组合在一起,来部分地完成这项工作。这是零件的代码:(sn是点的总数,label是簇编号的簇数组,xcoor和ycoor是点的坐标) 但是,这会导致以下错误: fig.gca().add_artist(circle1)

我不熟悉python和编程。我正试图用python绘制一个方向图。我在一个平面上有大量的点(大约1200000),每个点都属于一个簇。每个簇都应该有不同的颜色。我目前正在做的是为每个簇指定一种颜色,并在每个点绘制一个填充圆。我试图通过为不同的片段创建绘图,并使用“混合”将它们组合在一起,来部分地完成这项工作。这是零件的代码:(sn是点的总数,label是簇编号的簇数组,xcoor和ycoor是点的坐标)

但是,这会导致以下错误:

    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
可以作为颜色处理的任何东西。