我有一个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
当我通过函数传递它时得到的答案是-1955547256,但答案应该是8.82387x10^10。
这可能与操纵大数字有关,因为我通过函数计算出的较小值得到了正确的答案。但是为什么它会返回一个负数,等等?我知道这个函数不应该返回任何负数。
发布于 2021-12-31 12:45:52
您可能希望更改数组中的变量类型,还是在列表中调用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=int32https://stackoverflow.com/questions/70542105
复制相似问题