我想绘制一个有2000万个对象的数组,我有8 8GB的RAM,但当我运行以下代码行时,我仍然得到以下错误:
import matplotlib.pyplot as plt
import numpy as np
d = np.arange(200000000)
plt.plot(d)
plt.show()
错误:
Traceback (most recent call last):
...
File "C:\Python27\lib\site-packages\matplotlib\axes.py", line 317, in _grab_next_args
for seg in self._plot_args(remaining, kwargs):
File "C:\Python27\lib\site-packages\matplotlib\axes.py", line 292, in _plot_args
x = np.arange(y.shape[0], dtype=float)
MemoryError
发布于 2011-09-02 14:21:00
由于显示器和绘图仪的物理限制,您无论如何都无法绘制20,000,000个点。因此,您可以通过对数组进行采样或使用切片来减少数组:
>>> m = 20000000
>>> a = np.arange(m)
>>> n = 100 # <- reducing to 100 points
>>> s = m/n # <- size of slices to compress
>>> reduced = []
>>> for i in xrange(n):
... slice = a[i*s:(i+1)*s]
... reduced.append(np.mean(slice))
>>> reduced
[99999.5, 299999.5, ..., 19699999.5, 19899999.5]
。。假设np.mean
对您正在绘制的对象有意义。
发布于 2011-09-02 14:16:20
MemoryError
没有说谎--您的内存分配失败了。考虑到您正在尝试绘制2亿个点,这并不是那么不合理(请注意,您发布的数字是2亿,而不是2000万)。
绘制数百万个点很少或根本没有意义。当我有大型数据集时,我会对数据进行预处理,以便绘制不超过数千个点。对于像你这样的数据,一个简单的常规样本就可以做到这一点,但是为了更好地描述其他数据,峰值查找可能是必要的。
https://stackoverflow.com/questions/7284538
复制相似问题