为什么我的 NumPy logspace 给我一个无穷大的数组?

Tho*_*oet 6 python numpy

为了获得 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)

你如何解决这个问题以及我的代码做错了什么?

Mad*_*ist 8

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只是预期溢出的信号。