我偶然发现了一些非常奇怪的东西,我想知道它是否是Python错误,还是我对Numpy数组没有正确理解的东西。
我在计算内核技巧:
(c + np.matmul(x1, x2.T)) ** nN=n次方;c=自由参数
设x1为(3,6),x2 = (10,10)
计算矩阵应该会导致90的结果。但是,当我使用c=2和n=5时,结果是不正确的!它给了-1999119360而不是6590815232!
我在密码上做错什么了吗?还是一只虫子?因为当你减去n,结果是正确的!
发布于 2021-03-19 08:39:51
c + np.matmul(x1, x2.T)操作的结果是一个numpy.int32。问题似乎是在这个类上使用**操作时。结果也将是numpy.int32。但是这种类型的最大值是2147483647,在这个例子中,计算结果是6590815232。这会导致整数溢出。我希望你能理解。
将np.matmul(x1, x2.T)的结果转换为int类将提供正确的输出。ie:
(c + int(np.matmul(x1, x2.T))) ** n另一个选项是将值转换为numpy.int64,如下所示:
(c + np.int64(np.matmul(x1, x2.T))) ** nhttps://stackoverflow.com/questions/66704707
复制相似问题