首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的函数计算一个负数,即使它不应该

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

Stack Overflow用户
提问于 2021-12-31 12:00:55
回答 1查看 43关注 0票数 0

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

代码语言:javascript
复制
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。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-31 12:45:52

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

代码语言:javascript
复制
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就会发生这种效果。

它可以像这样检查:

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70542105

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档