问题描述
我有一个包含复数 (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 (将#修改为@)