创建矩阵时的 Python 错误

标签 python matrix

我已经用 Python 编写了一段代码来根据数据创建一个转移概率矩阵,但我总是得到两个特定数据点的错误值。我花了几天时间试图找出问题所在,但没有成功。

关于代码:输入是 csv 文件中的 4 列。准备数据后,前两列是新旧状态值。我需要计算每个旧状态值转移到新状态值的频率(基本上,每对 (x,y) 在数据的前两列中出现的频率)。这些列中的值从 0 到 99。在 trans_pr 矩阵中,我想得到一个数字,一对 (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

最佳答案

这听起来很像一个舍入问题。我想例如100*0.29(作为 float )向下舍入(即截断),因此产生 28 而不是 29。在将数字用作数组索引之前尝试自行舍入(即向上/向下舍入)。

更新:通过测试验证了我的猜想,即使数字如上所述 - 参见 here .

关于创建矩阵时的 Python 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6087597/

相关文章:

python - DatetimeIndex 阻止 DataFrame 从装饰函数返回

python - PostParameters 列表(Python 请求)

python - 将以前的文件大小与当前文件大小和标志进行比较

python - 导入 cv2 时 DLL 加载失败错误

mysql - 在 MySQL 中存储基因表达数据——需要联结表吗?

python - boost python enable_pickling 期望

java - 求逆矩阵

r - 根据 2 个不同变量的值从矩阵中选择

Python 对象矩阵 - 定义属性

python - Numpy 零二维数组 : substituting elements at specific indices