【发布时间】:2018-07-09 21:39:15
【问题描述】:
我正在执行如下的情节:
for i in range(len(classederror)):
plt.scatter(xlag, classederror[i, :])
plt.show()
变量的大小为:
xlag = np.array(2, 25, 50, 75, 100, 125, 150, 175, 200, 225, 250)
xlag.size = (11,)
-
classederror= 176501 行 x 11 列
但是,我遇到了内存问题,这是由于classederror 的大小太大。
有没有一种pythonic/更有效的方法来做到这一点而不会出现内存问题?
我想做什么
如下图所示,x 轴为xlag,y 轴为classederror
我想在classederror 中为一系列 x 轴值绘制每一行并研究数据的分布,最后我应该获得类似于下图的东西。
【问题讨论】:
-
classederror很小。假设是 64 位数字类型,例如np.float64,这大概是 (176501* 11 * 8 * 1e-6) = 15.53 兆字节......现在,我对matplotlib的内部了解不多,但即使它在下面创建副本引擎盖,我不认为这会导致内存问题。但可能会有更熟悉的人发表评论。 -
所以在我的计算机上使用
(10000, 11)形状的数组进行粗略测试,我消耗了大约 300 兆字节(整个过程)。假设此内存使用量呈线性增长,那么这将解释您的问题。尝试绘制 176501 行可能会导致此错误也就不足为奇了……您到底想做什么? -
@juanpa.arrivillaga 目前的代码产生 176501 行;一个
Line2D对象肯定会花费超过 8 个字节。 -
代码中没有点,只有行。因此,您显示的代码无论如何都不会产生显示的输出。这就是为什么我要求您提供minimal reproducible example 以及对
xlag中数据的解释。 -
你愿意无视我的cmets吗?在这种情况下,答案很简单:如果目标是看到 11 条线,那么绘制 170000 个点是没有意义的。
标签: python numpy matplotlib memory optimization