python-3.x - 为什么 numpy 将非常小的数字视为零?
问题描述
我正在做一个优化任务。考虑二维的“球体基准函数”。
import numpy as np
x = y = 0
X = np.array([x, y])
cost = np.sum(X**2)
print(cost) # zero
当 x 和 y 为零时,函数成本为零。但是考虑这个例子:
import numpy as np
X = np.array([-6.5333928195191023e-163, 2.7628829205465545e-163])
Y = X**2 # [0, 0]
cost = np.sum(Y) # zero
print(cost) # zero
成本不应该为零,但确实是。有没有办法解决这个问题?
解决方案
正常的浮点精度会将您的数字截断为零。如果你真的想使用这么小的值,你可以这样做:
X = np.array([-6.5333928195191023e-163, 2.7628829205465545e-163], dtype=np.longdouble)
Y = X**2 # [0, 0]
cost = np.sum(Y) # zero
print(cost) # zero
>> 5.0318743766791623303e-325
推荐阅读
- android - Json 图像未在 kotlin 中显示
- laravel - Laravel Echo 不听广播
- amazon-web-services - 域提供商中服务器 IP 的运行时 DNS 条目
- c# - 比较 gameObject 的变换并移除重复
- java - 在Android中将android Android图标转换为位图
- .net - 在 Visual Studio 2019 中找不到 SDK
- github-actions - 如何获取用户名,负责在 github 操作中触发工作流
- php - 使用 Carbon 仅解析时间
- javascript - 如何在 react-native 中跨所有组件/屏幕或全局监听 socket.io 事件?
- google-sheets - Google 表格:如何离线打开文件