2010-10-11 81 views
0

我試圖從一些CSV文件的數據填充到用下面的代碼一個numpy的數組:錯誤消息在2D numpy的陣列填充單元時

PreExArray=zeros([len(TestIDs),numColumns],float) 

for row in reader: 
    if row[1] =='PreEx10SecondsBEFORE': 
     PreExArray[(j-1),0]=[row[2]] 

然而,代碼的最後一行以上引發以下錯誤:

ValueError: setting an array element with a sequence. 

所以我打印出的行中的內容[2],如下所示:

print 'row[2] is: ',row[2] 

方法本產品ED:

行[2]爲:0.780083333333

所以行的內容[2]是不是一個序列作爲錯誤消息指示。相反,內容是一個數字。

因此,我習慣以下代碼將行[2]的內容放入一個變量,然後用該變量的內容填充PreExArray [(j-1),0],然後打印出內容該變量:

jones = row[2] 
PreExArray[(j-1),0]=jones 
print 'PreExArray[(j-1),0] is: ',PreExArray[(j-1),0] 

結果是:

PreExArray [(J-1),0]是:0.780083333333

因此,把行[2]代入變量解決了這個問題。但是,如果我必須每次都將它放入一個變量,那麼這是非常潦草的代碼。

任何人都可以告訴我如何修復代碼,以便當我鍵入更簡單的事情時不會拋出錯誤,如PreExArray [(j-1),0] = [row [2]]?

============================================== =============================================

OK 。我重新編寫了代碼,現在它拋出了一個新的錯誤。新的代碼如下:

PreExArray=zeros([len(TestIDs),numColumns],float) 

for row in reader: 
    if row[1] =='PreEx10SecondsBEFORE': 
     PreExArray[(j-1),0]=row[1] 
     PreExArray[(j-1),1]=row[2] 

這修改後的代碼現在引發以下錯誤消息:

PreExArray[(j-1),0]=row[1] 
ValueError: setting an array element with a sequence. 

然而,當我註釋掉PreExArray [(J-1),0] =行[ 1](#PreExArray [(j-1),0] = row [1]),則後續行將不會引發錯誤。

誰能告訴我如何編輯這個,以便它不會繼續拋出這個錯誤?

+0

根據您的比較,行[1]是一個字符串'PreEx10SecondsBEFORE'。你不能在一個numpy浮點數組中存儲一個字符串。你想在最後讓你的陣列看起來像什麼? – 2010-10-11 07:17:49

+0

我將採取每行的意思,用每行的方法創建一個新的數組/列表。這個練習重複五個不同的測試條件。然後,我將創建一個彙總矩陣,其列是變量,其行是測試條件,每行/列單元格中含有平均值。 – MedicalMath 2010-10-11 08:51:24

回答

1

你應該只具有:

PreExArray[(j-1),0]=row[2] 

也就是說,右手邊不應該被放到一個長度爲1的列表。

0

看起來您的行變量來自電子表格,第一個索引值是行標籤(字符串)。正如已經指出的那樣,你不能將這些數據存儲在數據類型爲'float'的數組中。

你得到的錯誤信息來自於numpy這個事實,一個字符串看起來像一個序列(可能是因爲它支持一個len屬性。)

如果要保存行標籤以重建電子表格可導入文件,並使用計算的新值,則必須將它們存儲在單獨的列表中。