python - Numpy:RuntimeWarning:log1p中遇到无效值
问题描述
我在np.log1p
:期间遇到警告RuntimeWarning: invalid value encountered in log1p
,但我不知道为什么。据我所知,输入是正确的。它仅包含and和 somefloat64
之间的值。-0.5
0.5
NaNs
一个问题是,当我尝试平分我的数组以找到违规条件时,看起来数组的任何子部分都可以在np.log1p
没有任何警告的情况下传递给。
因此,很抱歉我无法弄清楚如何从中生成 MWE,而且它太大而无法分享,但也许有人可以指出我可以研究的其他调试或调查途径?
首先,这里是警告:
z = np.log1p(x)
# /data/anaconda/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:1: RuntimeWarning: invalid value encountered in log1p
"""Entry point for launching an IPython kernel.
其他所有触发相同警告的调用:
_ = np.log1p(x.values.copy(order='C'))
_ = np.log1p(np.ravel(x.values))
然而,输入似乎是正确的:
x.info()
# <class 'pandas.core.frame.DataFrame'>
# DatetimeIndex: 4927 entries, 2000-01-03 to 2019-08-02
# Columns: 8119 entries, aaa to zzz
# dtypes: float64(8119)
# memory usage: 305.2 MB
x.values.flags
# C_CONTIGUOUS : False
# F_CONTIGUOUS : True
# OWNDATA : False
# WRITEABLE : True
# ALIGNED : True
# WRITEBACKIFCOPY : False
# UPDATEIFCOPY : False
(x.min().min(), x.max().max())
# (-0.5, 0.5)
Numpy 版本是1.15.4
(而 Pandas 是0.23.4
)。
现在,对于奇怪的部分:将数组(这里从末尾算起 20 行)分成两部分,没有任何部分收到警告:
z0 = np.log1p(x.values[:-20])
z1 = np.log1p(x.values[-20:])
np.allclose(z, np.concatenate((z0, z1)), equal_nan=True)
# True
但是,虽然连接的两个部分接近于单个调用 ( z
) 中获得的结果,但它们并不相同:
np.allclose(z.values, np.concatenate((z0, z1)), equal_nan=True)
# True, but
np.allclose(z.values, np.concatenate((z0, z1)), equal_nan=True, atol=0, rtol=0)
# False
差异很小,但我想知道采用log(1 + v)
单个标量如何不时产生不同的结果。
np.nanmax(np.abs(z.values - np.concatenate((z0, z1))))
# 1.1102230246251565e-16
我还应该尝试什么?
解决方案
- 没有数据,很难提供发生这种情况的原因。
根据我的原始评论,发布问题时使用的 numpy 版本不是当前版本。
- 因此,一种可能的解决方案是更新到软件包的当前版本。
- 根据 OP 的评论,在此发布时切换到当前版本 1.18.1 解决了该错误。
该函数
np.log1p1
包含一个默认where=True
参数,与 1.15 版本相比,该参数现在的功能似乎略有不同。
1.15 其中:True 的值表示计算该位置的 ufunc,False 的值表示将值单独留在输出中。
1.18 其中:此条件通过输入广播。在条件为 True 的位置,out 数组将设置为 ufunc 结果。在其他地方,out 数组将保留其原始值。请注意,如果通过 default 创建未初始化的 out 数组out=None
,则其中条件为 False 的位置将保持未初始化。
推荐阅读
- c - C语言中的套接字通信。发送文件内容
- c# - 将变量从另一个类传递到表单中
- c - C程序正在自动关闭
- swift - 图像压缩而不快速改变图像的分辨率
- makefile - 为什么在配方中使用 $(MAKE) 制作“--dry-run”会导致错误?
- xcode - 有没有办法在不手动选择所有目标或使用插件的情况下将文件添加到所有 Xcode 目标
- python-3.x - 使用python通过3D点进行平面拟合
- html - 为什么我的 css 文件导入不起作用?
- java - 在不同的 Maven 模块中测试多个实现?
- mysql - 使用 docker-compose.yml 的 tomcat + mysql + war