NumPy linspace():如何创建等距数字的数组
已发表: 2022-04-11本教程将教你如何使用NumPy linspace()在 Python 中创建一个均匀间隔的数字数组。
您将学习 NumPy linspace()
的语法,并通过示例帮助您了解如何使用它。
注意:要学习本教程,您需要安装 Python 和 NumPy。
还没有 NumPy? 我们为您整理了一份快速安装指南。
开始吧!
安装和导入 NumPy
在开始本教程之前,让我们快速完成安装 NumPy 库的步骤。
如果您已经安装了 NumPy,请随时跳到下一部分。
- 如果您使用的是 Google Colab(一种基于云的 Jupyter 笔记本环境),则可以导入 NumPy 并立即开始编码。 (推荐用于本教程)
- 如果您想设置本地工作环境,我建议安装 Python 的 Anaconda 发行版。 Anaconda 预装了几个有用的软件包。 您可以下载适用于您的操作系统的安装程序。 设置过程只需几分钟。
- 如果您的计算机上已经安装了 Python,您仍然可以安装 Anaconda 发行版。 您可以使用 conda 或 pip 来安装和管理软件包。 您可以从 Anaconda 命令提示符运行以下命令之一来安装 NumPy。
# Install NumPy using conda conda install numpy # Install NumPy using pip pip install numpy
下一步,通过运行以下命令在别名np
下导入numpy
。 这样做将帮助您将 NumPy 引用为np
— 无需在每次访问模块中的项目时都输入numpy
。
import numpy as np
展望未来,我们将使用点符号来访问 NumPy 库中的所有函数,如下所示: np.<func-name>
。
均匀间隔数字的情况
当您使用 NumPy 数组时,有时您需要在一个区间内创建一个由均匀间隔的数字组成的数组。
在我们继续之前,让我们快速回顾另一个类似的函数np.arange()
。
NumPy linspace() 与 NumPy arange()
如果您以前使用过 NumPy,您可能会使用np.arange()
创建指定范围内的数字数组。
您知道
np.arange(start, stop, step)
以 step 的step
返回从start
到但不包括stop
的数字数组; 默认步长为 1。
但是, step的值可能并不总是显而易见的。 让我们看看为什么会这样。
例如,如果您需要 4 个介于 0 和 1 之间的等距数字,则您知道步长必须为 0.25。 但是如果你使用np.arange()
,它不包括 1 的停止值。所以你必须选择一个超出停止值的间隔。
下图说明了更多示例,您需要在区间 [a, b] 中具有特定数量的均匀间隔点。

我们在 [0,1] 中的 4 个均匀分布的点的第一个示例非常简单。 你知道点之间的步长应该是 0.25。
假设您有一个稍微复杂的示例——您必须在 1 到 33 之间列出 7 个均匀分布的点。在这里,步长可能不是很清楚。 但是,在这种情况下,您可以手动计算step
的值。
但是, np.linspace()
在这里可以让您更简单!

使用np.linspace()
时,您只需要指定区间中的点数 - 而无需担心步长。 您将根据需要取回数组。
带着这个动机,让我们在下一节继续学习 NumPy linspace()
的语法。
NumPy linspace() 的语法
使用 NumPy linspace()
的语法如下所示:
np.linspace(start, stop, num, endpoint, retstep, dtype, axis)
一开始,上面的语法可能看起来很复杂,有很多参数。
但是,它们中的大多数是可选参数,我们将在几分钟内得出一个更简单的语法。
现在让我们从解析上面的语法开始:
-
start
和stop
分别是区间的起点和终点。 start 和 stop 都可以是标量或数组。 在本教程中,我们将限制为标量开始值和结束值。 -
num
是均匀分布的点的数量。 它是一个可选参数,默认值为 50。 -
endpoint
也是一个可选参数,可以是 True 或 False。 - 默认值为 True,表示默认情况下将终点包含在区间中。 但是,您可以将其设置为 False 以排除端点。
-
retstep
是另一个可选参数,它采用布尔值 True 或 False。 设置为 True 时,返回步长值。 -
dtype
是数组中数字的数据类型。 该类型通常被推断为 float 并且不需要显式提供。 -
axis
是另一个可选参数,表示应沿其存储数字的轴。 这仅在start
和stop
值本身是数组时才相关。
️ 那么np.linspace()
返回什么?
它返回一个由均匀分布的数字组成的 N 维数组。 如果参数retstep
设置为True
,它也会返回步长。
根据到目前为止的讨论,这是使用np.linspace()
的简化语法:
np.linspace(start, stop, num)
上面的代码行将返回一个间隔为
[start, stop]
的num
个等距数字组成的数组。
现在您已经了解了语法,让我们开始编写示例。
如何使用 NumPy linspace() 创建等间距数组
#1。 作为我们的第一个示例,让我们在区间 [1, 5] 中创建一个由 20 个均匀分布的数字组成的数组。
您可以将start
、 stop
和num
的值指定为关键字参数。 这显示在下面的代码单元格中:
import numpy as np arr1 = np.linspace(start = 1,stop = 5,num = 20) print(arr1) # Output: [1. 1.21052632 1.42105263 1.63157895 1.84210526 2.05263158 2.26315789 2.47368421 2.68421053 2.89473684 3.10526316 3.31578947 3.52631579 3.73684211 3.94736842 4.15789474 4.36842105 4.57894737 4.78947368 5. ]
注意数组中的数字是如何从 1 开始到 5 结束的——包括两个端点。 此外,观察数字(包括点 1 和 5)如何在返回的数组中表示为float
。

#2。 在前面的示例中,您已将start
、 stop
和num
的值作为关键字参数传入。 如果您以正确的顺序传入参数,您不妨将它们用作仅具有值的位置参数,如下所示。
import numpy as np arr2 = np.linspace(1,5,20) print(arr2) # Output: [1. 1.21052632 1.42105263 1.63157895 1.84210526 2.05263158 2.26315789 2.47368421 2.68421053 2.89473684 3.10526316 3.31578947 3.52631579 3.73684211 3.94736842 4.15789474 4.36842105 4.57894737 4.78947368 5. ]
#3。 现在让我们创建另一个数组,我们将retstep
设置为True
。
这意味着该函数现在将返回数组和步骤。 我们可以将它们解压缩成两个变量arr3
:数组和step_size
:返回的步长。
以下代码单元说明了如何执行此操作。
import numpy as np arr3, step_size = np.linspace(1,5,20,retstep = True) print(arr3) # Output: [1. 1.21052632 1.42105263 1.63157895 1.84210526 2.05263158 2.26315789 2.47368421 2.68421053 2.89473684 3.10526316 3.31578947 3.52631579 3.73684211 3.94736842 4.15789474 4.36842105 4.57894737 4.78947368 5. ] # Output: print(step_size) 0.21052631578947367
#4。 作为最后一个示例,让我们将endpoint
设置为False
,然后检查会发生什么。
import numpy as np arr4 = np.linspace(1,5,20,endpoint = False) print(arr4) # Output: [1. 1.2 1.4 1.6 1.8 2. 2.2 2.4 2.6 2.8 3. 3.2 3.4 3.6 3.8 4. 4.2 4.4 4.6 4.8]
在返回的数组中,您可以看到包含 1,而未包含 5。 数组中的最后一个值恰好是 4.8,但我们仍然有 20 个数字。
到目前为止,我们只生成了均匀间隔的数字数组。 在下一节中,让我们通过绘制这些数字来进行可视化。
如何在间隔中绘制均匀间隔的数字
在本节中,让我们选择 [10,15] 作为感兴趣的区间。 然后,使用np.linspace()
生成两个数组,每个数组分别有 8 个和 12 个点。
完成后,我们可以使用matplotlib
库中的绘图功能来绘制它们。
为清楚起见,我们将两个数组N1 = 8和N2 = 12固定在沿 y 轴的不同位置。
下面的代码片段演示了这一点。
import numpy as np import matplotlib.pyplot as plt N1 = 8 N2 = 12 a = 10 b = 15 y1 = np.zeros(N1) y2 = np.zeros(N2) x1 = np.linspace(a, b, N1) x2 = np.linspace(a, b, N2) plt.plot(x1, y1-0.5, 'o') plt.plot(x2, y2 + 0.5, 'o') plt.ylim([-1, 1]) plt.title(f'Evenly Spaced Numbers in the Interval [{a},{b}]') plt.xlabel('Interval') plt.show()

使用数学函数时,生成均匀分布的点会很有帮助。 我们将在下一节中了解这一点。
如何将 NumPy linspace() 与数学函数一起使用
使用np.linspace()
生成一个均匀间隔的数字数组后,您可以计算区间内的数学函数的值。
在下面的代码单元中,您首先在 0 到 2π 的区间内生成 50 个均匀分布的点。 然后在数组x
上使用np.sin()
创建数组y
。 请注意,您可以跳过num
参数,因为默认值为 50。我们仍将显式使用它。
下一步,您可以在区间 [0, 2π] 中绘制正弦函数。 为此,您可以使用 matplotlib,如前面的示例所示。 具体来说, matplotlib.pytplot
中的plot()
函数用于创建线图。
import numpy as np import matplotlib.pyplot as plt N = 50 a = 0.0 b = 2*np.pi x = np.linspace(a, b, N) y = np.sin(x) plt.plot(x, y, marker = "o") plt.ylim([-1, 1]) plt.title(f'y = sin(x)') plt.xlabel('x ---->') plt.show()

现在,通过将N
设置为 10 来运行上述代码。您将得到如下图所示的绘图。

您可以看到情节不是很平滑——因为您只在区间中选择了 10 个点。
通常,您考虑的点数越多,函数的绘图就越平滑。
结论
以下是我们所学内容的摘要。
- np.linspace(start, stop, num)返回区间[start, stop]中的num个等距数字组成的数组。
- 将可选参数endpoint设置为False以排除stop ,并将间隔设置为[start, stop) 。
- 可选择将retstep设置为True以获取步长。
- 使用np.linspace()生成均匀间隔的数组,然后将数组与数学函数一起使用。
我希望您现在了解np.linspace()的工作原理。 您可以选择在 Jupyter notebook 中运行上述示例。 查看我们的 Jupyter notebook 指南,或您可以考虑的其他 Jupyter 替代品。
很快在另一个 Python 教程中与大家见面。 在那之前,继续编码!