Python numpy操作计算不正确



我偶然发现了一些非常奇怪的东西,我想知道这是Python错误,还是我对Numpy数组没有正确理解。

我正在计算内核技巧:

(c + np.matmul(x1, x2.T)) ** n

n=n次方;c=自由参数

设x1为(3,6(,x2=(10,10(

计算matmul应该得到90。然而,当我使用c=2和n=5时;结果不正确!它给出了-1999119360而不是6590815232!

我的代码有问题吗?还是一个bug?因为当你减少n时,结果是正确的!

运算c + np.matmul(x1, x2.T)的结果是numpy.int32。问题似乎出在对此类使用**操作时。结果也将是numpy.int32。但这种类型的最大值是2147483647,在您的示例中,计算结果是6590815232。这会导致整数溢出。我希望你能理解。

np.matmul(x1, x2.T)的结果转换为int类可以得到正确的输出。即:

(c + int(np.matmul(x1, x2.T))) ** n

另一种选择是将值转换为numpy.int64,如:

(c + np.int64(np.matmul(x1, x2.T))) ** n

相关内容

  • 没有找到相关文章

最新更新