【发布时间】:2011-05-22 21:03:46
【问题描述】:
我已经用 Python 编写了一个代码来从数据中创建一个转移概率矩阵,但我不断得到两个特定数据点的错误值。我花了几天时间试图找出问题所在,但没有成功。
关于代码:输入是 csv 文件中的 4 列。准备好数据后,前两列是新旧状态值。我需要计算每个旧状态值转移到新状态值的频率(基本上,每对 (x,y) 在数据的前两列中出现的频率)。这些列中的值是从 0 到 99。在 trans_pr 矩阵中,我想获得一个数字,一对 (x,y) 在数据中出现的频率,并将这个数字放在 trans_pr 中的相应坐标 (x,y) 处矩阵。由于值是从 0 到 99,因此每次出现在数据中时,我都可以在该坐标处的矩阵中添加 1。
问题:代码工作正常,但我总是在坐标 (:,29) 和 (:,58) 和 (29,:) 和 (58;:) 处得到零,尽管在那里进行了观察。有时似乎还会将此坐标处的数字添加到上一行。再说一次,对我来说没有任何意义。
如果有人能提供帮助,我将不胜感激。 (我是 Python 新手,因此代码可能效率低下,但只有 bug 相关。)
代码尽可能简单:
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
【问题讨论】:
-
这是货币吗?我建议你看看
decimalPython 库。