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()
在这里可以为您提供更简单的解决方案!😄
使用np.linspace()
时,您只需要指定区间中的点数,而不必担心步长。然后您将获得所需的数组。
有了这个动机,让我们继续学习下一节NumPy linspace()
的语法。
NumPy linspace()的语法
使用NumPy linspace()
的语法如下所示:
np.linspace(start, stop, num, endpoint, retstep, dtype, axis)
首先,上述语法可能看起来非常复杂,有很多参数。
然而,它们中的大多数是可选参数,我们很快就会得到一个简单得多的语法。
现在让我们开始解析上述语法:
start
和stop
分别是区间的起点和终点。起点和终点都可以是标量或数组。在本教程中,我们将限制自己只使用标量的起点和终点值。num
是均匀间隔点的数量。这是一个可选参数,默认值为50。endpoint
也是一个可选参数,可以是True或False。- 默认值为True,这意味着默认情况下将包括终点在内的区间。但是,您可以将其设置为False以排除终点。
retstep
是另一个可选参数,以True或False的形式。当设置为True时,返回步长值。dtype
是数组中数字的数据类型。该类型通常被推断为浮点型,无需显式提供。axis
是另一个可选参数,表示应存储数字的轴。这仅在start
和stop
值本身是数组时才相关。
▶️ np.linspace()
返回什么?
它返回一个N维数组,其中包含均匀间隔的数字。如果将参数retstep
设置为True
,它还会返回步长。
根据到目前为止的讨论,这是一个使用np.linspace()
的简化语法:
np.linspace(start, stop, num)
上述代码行将返回一个在区间
[start, stop]
中均匀间隔的数字数组。
现在您已经了解了语法,让我们开始编写示例代码。
如何使用NumPy linspace()创建均匀间隔的数组
#1. 作为第一个示例,让我们在区间[1, 5]中创建一个包含20个均匀间隔数字的数组。
您可以将start
、stop
和num
的值指定为关键字参数。如下面的代码单元格所示:
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. 在上一个示例中,您将start
、stop
和num
的值作为关键字参数传递。如果按正确的顺序传递参数,您也可以将它们作为位置参数仅使用值,如下所示。
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 = 8和N2 = 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教程中见到大家。在那之前,继续编码吧!😀