2011-06-09 146 views
2

的我正在使用此代碼:NumPy的指數超出範圍錯誤

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: index out of range for array

如何確保我真的住在陣列範圍之內?

如果打印出LEN(r.date)和len(r.close)它們都返回:500


EDIT,這是從一個matplotlib示例代碼,使用NPY文件,我倒是想爲電子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 
+0

嗯。我剛剛生成了一個包含500行的測試csv數據文件,標記爲date和close的列以及分號分隔符,上述內容適用於我。 – DSM 2011-06-09 06:39:22

+0

嗯,它會與這個文件? http://db.tt/MIOqFA0 – 2011-06-09 06:48:28

回答

4

好的,我可以繪製原始數據集沒有錯誤 - 但我認爲它是真正DD/MM/YYYY時將日期信息誤解爲MM/DD/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列有更少的「真正的」val比它應該。由於我無法重現錯誤,所以很難確定。

你可以嘗試上面的日期時間修改?

+0

試圖你的修改,仍然是同樣的問題,我是會嘗試其他系統 – 2011-06-09 08:08:47

+0

這就排除了我的理論,但是你的matplotlib和我的理論之間肯定有不同。我認爲你沒有做錯什麼。 – DSM 2011-06-09 08:31:02

+0

這是安裝.. – 2011-06-09 11:16:20

1

我想你想繪製你的csv文件的數據,對吧? 我的問題是,我認爲你不會訪問你的數據r.dater.close。您的r是一個包含您的數據的數組,您不需要繪製數據的方法。

如果可以的話,你可以發送一些文件的行,我可以檢查它?

問候

編輯

它比我想象中的簡單。將r.date替換爲r['date']r.closer['close']。 這應該工作。

使用命令mlab.csv2rec加載csv文件。我提到matplotlib使用numpy。加載數據後,可以使用字段名稱訪問數據。名字由第一行定義(針對您的情況)。如果你想更多地瞭解這一點。您可以通過谷歌numpy.dtypes獲取有關字段的快速教程。 如果您需要更多信息或幫助,我將很樂意提供幫助。

+0

當然,你可以在這裏找到csv:http://db.tt/MIOqFA0。我正在查看一個matplotlib示例文件,這就是他們如何繪製數據(使用npy文件)。編輯上面 – 2011-06-09 06:37:03

+0

奇怪,我得到相同的錯誤,也許別的東西出錯了,我正在編輯與完整的錯誤日誌 – 2011-06-09 07:00:01

+0

問題我沒有一個'r.date'和'r.close'作爲'r'的方法。 – ahelm 2011-06-09 07:00:18