我的函数计算负数,即使它不应该

  • 本文关键字:不应该 函数 计算 python numpy
  • 更新时间 :
  • 英文 :


我有一个NumPy数组[545,32],我向它传递一个函数:

def obj_func(array):
    x = array[0]
    y = array[1]
    obj_func = (x**2 + y - 11)**2 + (x + y**2 - 7)**2
    return obj_func

公式应该看起来像

(545^2+32-11(^2+(545+32 ^2-7(^2

当我通过函数传递它时,得到的答案是-195547256,但答案应该是8.82387x10^10。

这可能与操纵大数字有关,因为我通过函数计算出的较小值得到了正确的答案。但为什么它会返回一个负数,等等。?我确信这个函数不应该返回任何负数。

您可能希望是更改数组中的变量类型,还是调用列表中的obj_func

obj_func(np.array([545, 32]))
>>> -1955547256
obj_func([545, 32])
>>> 88238765960
obj_func(np.array([545, 32], dtype=np.int64))
>>> 88238765960

当数组的数据超过array.dtype = np.int32 的最大机器限制时,就会发生这种影响

可以这样检查:

np.iinfo(np.int32)
>>> iinfo(min=-2147483648, max=2147483647, dtype=int32)
np.iinfo(np.int64)
>>> iinfo(min=-9223372036854775808, max=9223372036854775807, dtype=int64)
np.array([2147483647]) + 1
>>> array([-2147483648]) # shifts to minimum machine limit of dtype=int32

最新更新