首页 > 解决方案 > 有没有办法让 NumPy 数组计算 0 * inf = 0 而不是 0 * inf = NaN?

问题描述

我正在使用 NumPy 数组来表示函数和概率分布。我希望数组遵守0 * inf产生0.

我想

我该怎么做?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

标签: pythonarraysnumpynan

解决方案


我认为您最好的选择是选择一些大数字(例如1e100)并用它来表示无穷大。

然后你可以进行计算(注意RuntimeWarning: overflow encountered确保你的大数不会回到inf),如果有必要,将上面的任何东西转换1e90回无穷大。


推荐阅读