我有一个非常具体的问题,我甚至无法寻找类似的问题
我有以下变量
cm = np.array([[65, 4, 22, 24],
[6, 81, 5, 8],
[0, 11, 85, 19],
[4, 7, 3, 90]])
proportions = [0.3, 0.4, 0.1, 0.2]
n = np.sum(cm)
nisum = np.sum(cm, axis=1)
nsumj = np.sum(cm, axis=0)
p_i = np.zeros([cm.shape[0], 1])
p_ii = np.zeros([cm.shape[0], cm.shape[1]])
prod_ac = np.zeros([cm.shape[0], 1])
user_ac = np.zeros([cm.shape[0], 1])
overall_ac = 0
for i in range(cm.shape[1]):
for j in range(cm.shape[0]):
p_ii[i, j] = proportions[i] * cm[i, j] / nisum[i]
if i == 0:
p_i = np.sum(p_ii, axis=0)
prod_ac[i] = ((proportions[i] / p_i[i]) * (cm[i, i] / nisum[i]))
user_ac[i] = cm[i, i] / nisum[i]
overall_ac += proportions[i] * cm[i, i] / nisum[i]
如果我在PyCharm的控制台中执行整个代码块,prod\u ac的结果是错误的,结果是
prod_ac
Out[215]:
array([[ 1. ],
[ 31.05 ],
[ 1.28787879],
[ 2.76442308]])
但是,如果我立即再次执行代码的循环部分,prod\u ac的结果就可以了:
prod_ac
Out[217]:
array([[ 0.84252858],
[ 0.90639122],
[ 0.47056319],
[ 0.60898115]])
不会出现错误或警告
我猜这是和记忆有关。如果我一次执行所有的行,结果是错误的。但是如果我执行第一部分(从第1行到循环之前的那行),然后执行循环,结果就可以了
所有其他变量每次都创建得很好。这只是麻烦事
有人知道问题出在哪里吗??我怎么能每次都取得好成绩。这将是一个函数的一部分,所以我将无法执行部分在未来
谢谢
这不是内存问题。问题出在
p_i
会给
所以这就是造成差异的原因。原因是,在第i个轴完成之前,要求第i个轴的和。所以第二次工作是有意义的,因为这一次整个数组已经准备好了,所以它可以使用在接下来的迭代中生成的值。如何解决这个问题取决于你。一个工作示例如下:
相关问题 更多 >
编程相关推荐