我偶然发现了一些非常奇怪的东西,我想知道这是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