python - 有没有办法让 NumPy 数组计算 0 * inf = 0 而不是 0 * inf = NaN?
问题描述
我正在使用 NumPy 数组来表示函数和概率分布。我希望数组遵守0 * inf
产生0
.
我想
array([1., inf]) @ array([1., 0.])
屈服1.0
array([1., inf]) @ array([1., 1.])
屈服inf
我该怎么做?NumPy 中是否有我可以更改的设置?我应该子类化这个类ndarray
吗?
编辑---一个想法:
class parray(np.ndarray):
def __matmul__(self, other):
return np.matmul(np.nan_to_num(self), np.nan_to_num(other))
编辑 2---结合 orlp 的建议:
class parray(np.ndarray):
def __matmul__(self, other):
a = np.matmul(np.nan_to_num(self), np.nan_to_num(other))
a[a > 1e90] = inf
return a
解决方案
我认为您最好的选择是选择一些大数字(例如1e100
)并用它来表示无穷大。
然后你可以进行计算(注意RuntimeWarning: overflow encountered
确保你的大数不会回到inf
),如果有必要,将上面的任何东西转换1e90
回无穷大。
推荐阅读
- javascript - 无法使用点表示法访问 json 数据,这真的很奇怪
- beautifulsoup - 从 bs4.BeautifulSoup 获取 url 链接
- node.js - 如何设置 Informix 环境变量以部署到 Heroku
- c# - SEC7123:访问控制允许标头列表中不存在请求标头密钥
- c++ - 使用数组的对象的编译时多态性是否可能?
- push-notification - 使用 onesignal 和 nativescript 单击推送通知后打开特定的应用程序页面
- python - 如何定义具有多个输入张量的层(具有不同形状的张量)
- ruby-on-rails - Rails:多态关联(has_many)异常
- asp.net - 接受 ASP.NET WebAPI 中的任何 HTTP 方法/动词
- javascript - 在 Angular HTTP PUT 的请求正文中传递原始数据类型