有效使用具有大数据大小的内存

时间:2018-01-30 21:40:01

标签: python numpy matplotlib memory optimization

我正在执行如下情节:

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轴值,并研究数据的分布,最后我应该获得类似于下图的内容。

enter image description here

1 个答案:

答案 0 :(得分:2)

绘制单个散点图当然比176501散点图更有效。

import numpy as np
import matplotlib.pyplot as plt

xlag = np.array([2, 25, 50, 75, 100, 125, 150, 175, 200, 225, 250])
classederror = (np.random.randn(176501, 11)*25)*(0.2+np.sort(np.random.rand(11)))

plt.scatter(np.tile(xlag,len(classederror)), classederror.flatten())

plt.show()

enter image description here

鉴于可以从这样的情节中得出有限的信息,直接绘制11条线可能是有意义的。

import numpy as np
import matplotlib.pyplot as plt

xlag = np.array([2, 25, 50, 75, 100, 125, 150, 175, 200, 225, 250])
classederror = (np.random.randn(176501, 11)*25)*(0.2+np.sort(np.random.rand(11)))

vals = np.c_[classederror.min(axis=0),classederror.max(axis=0)].T
x= np.c_[xlag,xlag].T
plt.plot(x,vals, color="C0", lw=2)

plt.show()

enter image description here

为了获得关于点密度的信息,可以使用其他方法,例如小提琴情节。

plt.violinplot(classederror, xlag, points=50, widths=20,
                  showmeans=True, showextrema=True, showmedians=True)

enter image description here