我已經用Python編寫了一個代碼來創建數據的轉換概率矩陣,但是我一直在爲兩個特定的數據點收到錯誤的值。我花了好幾天的時間試圖找出問題,但沒有成功。創建矩陣時的Python bug
關於代碼:輸入是csv文件中的4列。在準備好數據之後,前兩列是新舊狀態值。我需要計算每個舊狀態值轉移到新狀態的頻率(基本上,每個對(x,y)在數據的前兩列中出現的頻率)。這些列中的值是從0到99.在trans_pr矩陣中,我想獲得一個數字,在數據中出現pair(x,y)的頻率,並且在trans_pr中的相應座標(x,y)處具有此數字矩陣。由於數值是從0到99,所以我可以在每次出現在數據中時在這個座標上加1。
問題:代碼工作正常,但我始終在座標(:,29)和(:,58)和(29,:)和(58; :)儘管有觀察值的零點。它有時似乎還將此座標處的數字添加到上一行。再次,對我來說沒有任何意義。
如果有人可以幫忙,我將不勝感激。 (我是新來的Python,因此代碼可能是低效的,但只有錯誤是相關的。)
的代碼很簡單,因爲它可以:
from numpy import *
import csv
my_data = genfromtxt('99c_test.csv', delimiter=',')
"""prepares data for further calculations"""
my_data1=zeros((len(my_data),4))
my_data1[1:,0]=100*my_data[1:,0]
my_data1[1:,1]=100*my_data[1:,3]
my_data1[1:,2]=my_data[1:,1]
my_data1[1:,3]=my_data[1:,2]
my_data2=my_data1
trans_pr=zeros((101,101))
print my_data2
"""fills the matrix with frequencies of observations"""
for i in range(len(my_data2)):
trans_pr[my_data2[i,1],my_data2[i,0]]=trans_pr[my_data2[i,1],my_data2[i,0]]+1
c = csv.writer(open("trpr1.csv", "wb"))
c.writerows(trans_pr)
你可以利用這個測試代碼輸入(只是將它保存爲csv文件):
p_cent,p_euro,p_euro_old,p_cent_old
0.01,1,1,0.28
0.01,1,1,0.29
0.01,1,1,0.3
0.01,1,1,0.28
0.01,1,1,0.29
0.01,1,1,0.3
0.01,1,1,0.57
0.01,1,1,0.58
0.01,1,1,0.59
0.01,1,1,0.6
是這種貨幣?我建議你看看'decimal' Python庫。 – Skurmedel 2011-05-22 11:48:42