Ошибка памяти при попытке построить большой массив с помощью matplotlib - PullRequest
3 голосов
/ 02 сентября 2011

Я хотел бы построить массив из 20 миллионов объектов, у меня 8 ГБ ОЗУ, и все же я получаю следующую ошибку при запуске следующих строк:

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

Ответы [ 2 ]

6 голосов
/ 02 сентября 2011

Из-за физических ограничений дисплеев и плоттеров вы все равно не сможете построить 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 имеет смысл для объектов, которые вы наносите.

2 голосов
/ 02 сентября 2011

MemoryError не врет - вам не удалось выделить память.Это не так уж и необоснованно, учитывая, что вы пытаетесь построить 200 миллионов точек (обратите внимание, что число, которое вы опубликовали, составило 200 миллионов, а не 20 миллионов).

Редко или никогда не имеет смысла строить миллионы точек,Когда у меня большие наборы данных, я предварительно обрабатываю свои данные, так что я строю не более тысячи точек.Простая регулярная выборка подойдет для таких данных, как у вас, но для наглядного изображения других данных может потребоваться поиск пиков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...