NumPy linspace():如何创建均匀间隔的数字数组

本教程将教您如何使用NumPy linspace()在Python中创建一个等间距数字的数组。

您将学习NumPy linspace()的语法,然后通过示例来帮助您理解如何使用它。

注意:要按照本教程进行操作,您需要安装Python和NumPy。

还没有安装NumPy?我们为您准备了一个快速安装指南。

让我们开始吧!

安装和导入NumPy

在开始教程之前,让我们快速了解安装NumPy库的步骤。

⏩ 如果您已经安装了NumPy,请随时跳到下一节。

  • 如果您正在使用云端的Python环境,您可以导入NumPy并立即开始编码。(本教程推荐使用)
  • 如果您想设置本地工作环境,我建议安装Anaconda Python发行版。Anaconda附带了几个有用的预装包。您可以下载适用于您的操作系统的安装程序。设置过程只需要几分钟时间。⌛
  • 如果您已经在计算机上安装了Python,您仍然可以安装Anaconda发行版。您可以使用conda或pip来安装和管理包。您可以从Anaconda命令提示符中运行以下命令之一来安装NumPy。
# 使用conda安装NumPy
conda install numpy

# 使用pip安装NumPy
pip install numpy

作为下一步,通过运行以下命令导入numpy并将其别名为np。这样做将帮助您将NumPy引用为np,而无需每次访问模块中的项目时都键入numpy

import numpy as np

今后,我们将使用点符号来访问NumPy库中的所有函数,如np.

等间距数字的应用

当您在使用数值计算时,有时您需要在一个区间内创建一组等间距的数字数组。

在我们进一步讨论之前,让我们快速了解另一个类似的函数np.arange()

NumPy linspace()与NumPy arange()的区别

如果您以前使用过NumPy,您可能已经使用过np.arange()来创建在指定范围内的数字数组。

您知道np.arange(start, stop, step)返回从start到但不包括stop的数字数组,步长为step,默认步长为1。

然而,step的值可能并不总是显而易见的。让我们看看为什么会这样。

例如,如果您需要在0和1之间有4个等间距的数字,您知道步长必须为0.25。但是如果您使用np.arange(),它不包括1的停止值。因此,您将不得不选择一个超出停止值的范围。

下面的图像展示了一些更多的示例,您需要在区间[a, b]中获得特定数量的等间距点。

区间内的等间距点

我们在[0,1]中的第一个示例,需要4个等间距点,这很容易。您知道点之间的步长应该是0.25。

假设您有一个稍微复杂一些的示例——您需要在1和33之间列出7个等间距的点。在这种情况下,步长可能不会立即清晰。但是,在这种情况下,您可以手动计算出步长的值。

然而,np.linspace()在这里可以为您提供更简单的解决方案!😄

使用NumPy linspace

使用np.linspace()时,您只需要指定区间中的点数,而不必担心步长。然后您将获得所需的数组。

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

NumPy linspace()的语法

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

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

首先,上述语法可能看起来非常复杂,有很多参数。

然而,它们中的大多数是可选参数,我们很快就会得到一个简单得多的语法。

现在让我们开始解析上述语法:

  • startstop分别是区间的起点和终点。起点和终点都可以是标量或数组。在本教程中,我们将限制自己只使用标量的起点和终点值。
  • num是均匀间隔点的数量。这是一个可选参数,默认值为50。
  • endpoint也是一个可选参数,可以是True或False。
  • 默认值为True,这意味着默认情况下将包括终点在内的区间。但是,您可以将其设置为False以排除终点。
  • retstep是另一个可选参数,以True或False的形式。当设置为True时,返回步长值。
  • dtype是数组中数字的数据类型。该类型通常被推断为浮点型,无需显式提供。
  • axis是另一个可选参数,表示应存储数字的轴。这仅在startstop值本身是数组时才相关。

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

它返回一个N维数组,其中包含均匀间隔的数字。如果将参数retstep设置为True,它还会返回步长。

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

np.linspace(start, stop, num)

上述代码行将返回一个在区间[start, stop]中均匀间隔的数字数组。

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

如何使用NumPy linspace()创建均匀间隔的数组

#1. 作为第一个示例,让我们在区间[1, 5]中创建一个包含20个均匀间隔数字的数组。

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

import numpy as np
arr1 = np.linspace(start = 1,stop = 5,num = 20)
print(arr1)

# 输出:
[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)

# 输出:
[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)

# 输出:
[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.        ]

# 输出:
print(step_size)
0.21052631578947367

#4. 作为最后一个例子,让我们将endpoint设置为False,看看会发生什么。

import numpy as np
arr4 = np.linspace(1,5,20,endpoint = False)
print(arr4)

# 输出:
[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库的绘图函数来绘制它们。

为了清晰起见,我们将在y轴上的不同位置上夹住两个长度为N1 = 8N2 = 12的均匀间隔点的数组。

下面的代码片段演示了这一点。

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'在区间[{a},{b}]中的均匀间隔数字')
plt.xlabel('区间')

plt.show()

在处理数学函数时,生成均匀间隔的点可以很有帮助。我们将在下一节中学习这方面的内容。

如何使用NumPy linspace()和数学函数

在使用np.linspace()生成均匀间隔的数字数组之后,可以在区间内计算数学函数的值。

在下面的代码单元格中,首先在区间0到2π中生成50个均匀间隔的点。然后使用np.sin()在数组x上创建数组y。注意,可以跳过num参数,因为默认值为50。我们仍然会明确使用它。

然后,可以在区间[0, 2π]中绘制sine函数。为此,可以使用上一个示例中的matplotlib。具体来说,matplotlib.pyplot中的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笔记本中运行以上示例。查看我们的指南Jupyter notebook,或者其他你可以考虑的Jupyter alternatives

再见,希望很快在另一个Python教程中见到大家。在那之前,继续编码吧!😀

类似文章