Python 3.6中的类,用于跟踪一组计数(通过嵌套字典)和相关概率的numpy ndarray。当我将self.probability元素设置为新值(初始化为0.0)时,可变属性不会更改。使用numpy 1.12。
my_input_fn
以下是输出:
****问题1,8内部循环:1.0
概率1,8外循环0.0
答案 0 :(得分:0)
MatrixClass实例中self.p的值确实发生了变化。问题在于在函数“ update_probability(self)”中,将p [1] [8]的值设置为1.0,然后在返回之前将其设置为0.0。通过在如下所示的update_probability函数中添加几个打印语句,然后运行它以查看控制台输出可以演示该问题
def update_probability(self):
p = self.p
print("p is ", p)
for i, t in enumerate(self.tokens):
total = 0
for j, s in enumerate(self.sequences):
total += self.count[t][s]
if total != 0:
for s in self.sequences:
p[i][j] = self.count[t][s] / float(total)
print("Setting p[" + str(i) + "][" + str(j) + "] to " + str(self.count[t][s] / float(total)))
print("p is equal to ", p , "\n")
if self.count[t][s] > 0:
print('****Prob ' + str(i) + ',' + str(j) + ' inner loop: ' + str(p[i][j]))
if i == 1 and j == 8:
print(' Prob ' + str(i) + ',' + str(j) + ' outer loop ' + str(p[i][j]))
return p
***CONSOLE OUPUT***
Setting p[1][8] to 0.0
p is equal to [[0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0.]]
Setting p[1][8] to 0.0
p is equal to [[0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0.]]
Setting p[1][8] to 0.0
p is equal to [[0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0.]]
Setting p[1][8] to 0.0
p is equal to [[0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0.]]
Setting p[1][8] to 1.0 ###HERE THE VALUE OF P GETS SET TO 1.0
p is equal to [[0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 1.]
[0. 0. 0. 0. 0. 0. 0. 0. 0.]]
****Prob 1,8 inner loop: 1.0
Setting p[1][8] to 0.0
p is equal to [[0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0.]]
Setting p[1][8] to 0.0 ###NOW IT IS BACK TO 0.0 and this is the return value you get
p is equal to [[0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0.]]
Setting p[1][8] to 0.0
p is equal to [[0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0.]]
Setting p[1][8] to 0.0
p is equal to [[0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0.]]
Prob 1,8 outer loop 0.0
我建议您立即将update_probability方法修改为,它仅将p [1] [8]的值设置为self.count [t] [s] / float(total)等于的任何值。索引i和索引j都没有发生变化。我建议您仔细查看所使用的索引。