Numpy index вне диапазона ошибки - PullRequest
2 голосов
/ 09 июня 2011

Я использую этот код:

r = mlab.csv2rec(datafile, delimiter=';')

fig = plt.figure()
fig.subplots_adjust(bottom=0.2)
ax = fig.add_subplot(111)
ax.plot(r.date, r.close)

но он возвращает это:

ax.plot (r.date, r.close)

IndexError: индекс вне диапазона для массива

Как мне убедиться, что я остаюсь внутри диапазона массива?

если я распечатаю len (r.date) и len (r.close), они оба возвращаются: 500


РЕДАКТИРОВАТЬ, это пример кода из matplotlib, используя файл npy, я хотел бы сделать то же самое для e CSV-файла:

datafile = cbook.get_sample_data('goog.npy')
r = np.load(datafile).view(np.recarray)

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(r.date, r.adj_close)

РЕДАКТИРОВАТЬ, полный журнал ошибок:

Traceback (most recent call last):
  File "main02.py", line 66, in <module>
    ax.plot(r['date'], r['close'])
  File "/usr/lib/python2.6/site-packages/matplotlib/axes.py", line 3788, in plot
    self.autoscale_view(scalex=scalex, scaley=scaley)
  File "/usr/lib/python2.6/site-packages/matplotlib/axes.py", line 1824, in autoscale_view
    y0, y1 = ylocator.view_limits(y0, y1)
  File "/usr/lib/python2.6/site-packages/matplotlib/ticker.py", line 1170, in view_limits
    return np.take(self.bin_boundaries(dmin, dmax), [0,-1])
  File "/film/tools/PythonExtensions/v41/py26_linux-x64/numpy/core/fromnumeric.py", line 103, in take
    return take(indices, axis, out, mode)
IndexError: index out of range for array

Ответы [ 2 ]

4 голосов
/ 09 июня 2011

Хорошо, я могу построить исходный набор данных без ошибок - но я думаю, что это неверная интерпретация информации о дате как ММ / ДД / ГГГГ, когда она действительно ДД / ММ / ГГГГ.

Вот что я получу за оригинальный код:

bad date plot

И вот что я получаю, когда исправляю дату:

import datetime
fixdate = lambda d: datetime.datetime.strptime(d, '%d/%m/%Y')
r = mlab.csv2rec(datafile, delimiter=';', converterd={0: fixdate})

good plot

Так что, если бы мне пришлось угадывать, я бы сказал, что ваша версия matplotlib отклоняет невозможные даты, поэтому она думает, что ваш столбец r.date имеет меньше «реальных» значений, чем следовало бы. Поскольку я не могу воспроизвести ошибку, трудно быть уверенным.

Не могли бы вы попробовать вышеуказанную модификацию даты и времени?

1 голос
/ 09 июня 2011

Полагаю, вы хотите вывести свои данные из csv-файла, верно?Моя проблема в том, что я думаю, что вы не получите доступ к своим данным с r.date и r.close.Ваш r - это массив с вашими данными, и вам не нужны методы для построения данных.

Если это возможно, вы можете отправить несколько строк файла, чтобы я мог проверить это?

С уважением

РЕДАКТИРОВАТЬ

Это проще, чем я думал.Замените r.date на r['date'] и r.close на r['close'].Это должно работать.

Вы загружаете с помощью команды mlab.csv2rec csv-файл.Я использую Matplotlib для этого.После того, как вы загрузили данные, вы можете получить доступ к данным с именами полей.Имена определяются первой строкой (для вашего случая).Если вы хотите узнать больше об этом.Вы можете Google numpy.dtypes для быстрого обучения по полям.Если вам нужна дополнительная информация или помощь, я буду рад помочь.

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