我有一个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