Numpy索引超出范围错误

时间:2011-06-09 04:48:11

标签: python numpy matplotlib

我正在使用此代码:

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 个答案:

答案 0 :(得分:4)

好的,我可以毫无错误地绘制原始数据集 - 但我认为它错误解释日期信息为MM / DD / YYYY,当它真的是DD / MM / YYYY时。

以下是我对原始代码的了解:

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 :(得分:1)

我想你想要绘制csv文件的数据,对吧? 我的问题是,我认为您无法使用r.dater.close访问您的数据。您的r是包含数据的数组,您不需要绘制数据的方法。

如果有可能你可以发送一些我可以查看的文件行吗?

祝你好运

修改

这比我想象的容易。将r.date替换为r['date'],将r.close替换为r['close']。 这应该工作。

使用命令mlab.csv2rec加载csv文件。我猜matplotlib使用numpy。加载数据后,可以使用字段名称访问数据。名称由第一行定义(对于您的情况)。如果您想了解更多相关信息。您可以谷歌numpy.dtypes获取有关字段的快速教程。 如果您想要更多信息或帮助,我将很乐意提供帮助。