为了获得 1000 到 1000000000 的对数数组,有 23 个点,我用 Python 编写了以下代码:
import numpy as np
x4 = np.logspace(start=1000, stop=1000000000, num=23, base=10)
print(x4)
Run Code Online (Sandbox Code Playgroud)
结果如下:
[inf inf inf inf inf inf inf inf inf inf inf inf inf inf inf inf inf inf inf inf inf inf inf]
Run Code Online (Sandbox Code Playgroud)
你如何解决这个问题以及我的代码做错了什么?
np.logspace没有做你认为它正在做的事情。您期待的效果是np.geomspace:
10**np.linspace(np.log(1000), np.log10(1000000000), 23)
Run Code Online (Sandbox Code Playgroud)
事实上,你正在得到
10**np.linspace(1000, 1000000000, 23)
Run Code Online (Sandbox Code Playgroud)
来自文档:
在线性空间中,序列从
base ** start(以start的幂为底数)开始,以( 参见下面的端点)结束。base ** stop
所以你可能想要
np.logspace(3, 9, num=23, base=10)
Run Code Online (Sandbox Code Playgroud)
或者,
np.geomspace(10**3, 10**9, 23)
Run Code Online (Sandbox Code Playgroud)
结果的确切原因可以通过以下方式查看np.finfo:
>>> np.finfo(np.float_)
finfo(resolution=1e-15, min=-1.7976931348623157e+308, max=1.7976931348623157e+308, dtype=float64)
Run Code Online (Sandbox Code Playgroud)
因为10**1000 > 1.7976931348623157e+308,inf只是预期溢出的信号。
| 归档时间: |
|
| 查看次数: |
1131 次 |
| 最近记录: |