【发布时间】:2019-02-21 17:58:00
【问题描述】:
我想计算数组的 1 次方到 K 次方的总和,并同样计算张量的 1 次方到 k 次方的总和。我发现以下代码及其结果完全不同,我不知道为什么。
我调试了代码,知道第一轮结果是相等的。
Numpy 代码:
adj_k_prob = adj_prob
adj_k_pow = adj_prob
for i in range(K):
adj_k_pow = np.matmul(adj_prob, adj_k_pow)
adj_k_prob += adj_k_pow
Pytorch 代码:
adj_k_prob = adj_prob_tensor
adj_k_pow = adj_prob_tensor
for i in range(K):
adj_k_pow = torch.matmul(adj_prob_tensor, adj_k_pow)
adj_k_prob += adj_k_pow
循环开始时adj_prob_tensor和adj_prob的值如下:
tensor([[0.0000, 0.1429, 0.1429, 0.1429, 0.1429, 0.1429, 0.1429, 0.1429],
[0.2500, 0.0000, 0.2500, 0.2500, 0.0000, 0.0000, 0.0000, 0.2500],
[0.2500, 0.2500, 0.0000, 0.2500, 0.0000, 0.0000, 0.0000, 0.2500],
[0.2500, 0.2500, 0.2500, 0.0000, 0.0000, 0.0000, 0.0000, 0.2500],
[0.5000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.5000, 0.0000],
[0.5000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.5000, 0.0000],
[0.3333, 0.0000, 0.0000, 0.0000, 0.3333, 0.3333, 0.0000, 0.0000],
[0.2500, 0.2500, 0.2500, 0.2500, 0.0000, 0.0000, 0.0000, 0.0000]])
有什么需要检查的吗?
【问题讨论】:
-
噢,要计算功率,您不应该在两个循环中都使用
=而不是+=作为赋值运算符吗?不过,不确定这是否能解决您的差异问题。 -
@DavideFiocco 非常感谢您的帮助。实际上我的问题是为什么这两个代码不相等以及它们之间的区别是什么。但再次感谢您的帮助
-
@DavideFiocco 我编辑了这个问题,谢谢。
-
你能提供
adj_prob和adj_prob_tensor的例子吗? stackoverflow.com/help/mcve