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] 中具有特定数量的均匀间隔点。

numpy-linspace
区间内均匀分布的点

我们在 [0,1] 中的 4 个均匀分布的点的第一个示例非常简单。 你知道点之间的步长应该是 0.25。

假设您有一个稍微复杂的示例——您必须在 1 到 33 之间列出 7 个均匀分布的点。在这里,步长可能不是很清楚。 但是,在这种情况下,您可以手动计算step的值。

但是, np.linspace()在这里可以让您更简单!

使用 numpy-linspace
使用 NumPy 空间

使用np.linspace()时,您只需要指定区间中的点数 - 而无需担心步长。 您将根据需要取回数组。

带着这个动机,让我们在下一节继续学习 NumPy linspace()的语法。

NumPy linspace() 的语法

使用 NumPy linspace()的语法如下所示:

 np.linspace(start, stop, num, endpoint, retstep, dtype, axis)

一开始,上面的语法可能看起来很复杂,有很多参数。

但是,它们中的大多数是可选参数,我们将在几分钟内得出一个更简单的语法。

现在让我们从解析上面的语法开始:

  • startstop分别是区间的起点和终点。 start 和 stop 都可以是标量或数组。 在本教程中,我们将限制为标量开始值和结束值。
  • num是均匀分布的点的数量。 它是一个可选参数,默认值为 50。
  • endpoint也是一个可选参数,可以是 True 或 False。
  • 默认值为 True,表示默认情况下将终点包含在区间中。 但是,您可以将其设置为 False 以排除端点。
  • retstep是另一个可选参数,它采用布尔值 True 或 False。 设置为 True 时,返回步长值。
  • dtype是数组中数字的数据类型。 该类型通常被推断为 float 并且不需要显式提供。
  • axis是另一个可选参数,表示应沿其存储数字的轴。 这仅在startstop值本身是数组时才相关。

️ 那么np.linspace()返回什么?

它返回一个由均匀分布的数字组成的 N 维数组。 如果参数retstep设置为True ,它也会返回步长。

根据到目前为止的讨论,这是使用np.linspace()的简化语法:

 np.linspace(start, stop, num)

上面的代码行将返回一个间隔为[start, stop]num个等距数字组成的数组。

现在您已经了解了语法,让我们开始编写示例。

如何使用 NumPy linspace() 创建等间距数组

#1。 作为我们的第一个示例,让我们在区间 [1, 5] 中创建一个由 20 个均匀分布的数字组成的数组。

您可以将startstopnum的值指定为关键字参数。 这显示在下面的代码单元格中:

 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。 在前面的示例中,您已将startstopnum的值作为关键字参数传入。 如果您以正确的顺序传入参数,您不妨将它们用作仅具有值的位置参数,如下所示。

 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 = 8N2 = 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-plot

使用数学函数时,生成均匀分布的点会很有帮助。 我们将在下一节中了解这一点。

如何将 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 教程中与大家见面。 在那之前,继续编码!