Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.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 尝试使用matplotlib打印大数组时出现内存错误_Python_Numpy_Matplotlib - Fatal编程技术网

Python 尝试使用matplotlib打印大数组时出现内存错误

Python 尝试使用matplotlib打印大数组时出现内存错误,python,numpy,matplotlib,Python,Numpy,Matplotlib,我想绘制一个2000万对象的数组,我有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",

我想绘制一个2000万对象的数组,我有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

MemoryError
没有撒谎——内存分配失败。考虑到你正在尝试绘制2亿个点(注意你发布的数字是2亿,而不是2000万),这并不是很不合理


绘制数百万个点很少或根本没有意义。当我有大型数据集时,我会对数据进行预处理,以便绘制的点不会超过数千个。对于像您这样的数据,一个简单的常规样本就可以了,但峰值查找对于其他数据的出色描述是必要的。

由于显示器和绘图仪的物理限制,您无论如何都无法绘制20000000点。因此,您可以通过采样或使用切片来减少阵列:

>>> 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]
>m=20000000
>>>a=np.arange(米)
>>>n=100#>>s=m/n#>>reduced=[]
>>>对于x范围内的i(n):
...     切片=a[i*s:(i+1)*s]
...     减少。追加(np.平均值(切片))
>>>减少
[99999.5, 299999.5, ..., 19699999.5, 19899999.5]

。。假设
np.mean
对正在绘制的对象有意义。

看起来您试图绘制2000000个对象而不是2000000个对象,或者,如果
np,mean
没有意义或不需要,您可以通过对原始数组的适当索引使用切片:
reduced=a[:s]
如果需要进行数组缩减,则只需(在n=100行之后)a=np.mean(a.重塑(100,-1),axis=1)就可以更快地进行缩减