如何避免试图将元素归零的下溢

问题描述

我有一个包含复数 (F) 的大型 numpy 二维数组 np.complex64。它有很多非常小的数字。为了我的计算,我只需要 ~1e-6 - 1e-9 的精度。由于这个矩阵非常大,我尝试使用稀疏矩阵表示。所以我尝试这样做:

np.seterr(all="raise")
...
F = getF()
F[np.abs(F) < EPSILON] = 0
# EPSILON = 1e-9. It is supposed to be in between 1e-6 and 1e-9
return csr_matrix(F)

但是计算绝对值会产生下溢错误(numpy 设置为引发错误):

FloatingPointError: underflow encountered in absolute

如果 seterr 没有完成,Numpy 不会引发错误,但只是输出 NaN,这会导致问题,因为这个矩阵 F 是一系列计算的起点。

从我读到的内容来看,下溢主要是通过获取日志并直接使用日志值而不是主要值来处理的,但在这种情况下,无论如何我都想丢弃它们。有没有一种理智的方法呢?我想到了 np.clip,但我有复数数据,所以使用它不是很简单。

所以我的问题是是否存在一种优雅的(希望是规范的)方式来处理这个问题?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)