跳至主要内容

如何使用 NumPy 的 linspace() 函数

通过这篇简明易懂的教程,学习如何使用 NumPy 的 linspace() 函数。

使用 AI 探索

NumPy 是 Python 数据科学生态系统中的基础包,提供了大量高效处理数值数据的函数。其中,linspace() 常用于在指定区间内生成等间距的数值序列,是需要精确数值范围的任务(如数据可视化和数学建模)中的实用工具。在本教程中,我将带您全面了解 linspace() 函数的用法。

快速答案:如何使用 np.linspace()

如果您时间紧张,这里是对 linspace() 的最简要说明。NumPy 的 linspace() 函数会在给定区间内生成等间距的数字数组。下面的例子中,我们创建一个从 0 到 100 的数组,包含 5 个数。可想而知,它会返回数组 [0, 25, 75, 100]。

import numpy as np

# Basic usage of linspace to create an array from 0 to 100 with 5 elements
linspace_example = np.linspace(0, 100.0, 5)
linspace_example # Return example

# Output: array([  0.,  25.,  50.,  75., 100.])

为什么使用 NumPy 的 linspace() 函数?

linspace() 提供了一种简单高效的方式来生成线性等距的数值,在需要特定数值范围的多种场景中都很有用,例如数据可视化、模拟仿真,甚至算法的精调。以下是一些 linspace() 的使用示例:

  • 数据可视化任务:例如,在创建展示卫星随时间轨迹的折线图时,可以用 linspace() 生成采样位置数据的时间间隔,确保图中曲线平滑连续。
  • 模拟仿真:在金融建模中,为评估不同利率对债券定价的影响,linspace() 可以生成从最低到最高预期利率的一系列数值,从而在完整区间上进行全面分析。
  • 科学研究:研究全球变暖对极地冰盖的影响时,研究人员可能使用 linspace() 在数十年跨度上创建一系列等间隔的时间点,并在每个时间点模拟全球平均气温的上升及其对冰融速率的影响。

NumPy linspace() 语法与用法示例

如前所述,linspace() 用于创建线性等距的数值,这对多种数值计算都很有帮助。在进入示例之前,我们先看看使用 linspace() 时可以设置的不同参数。

NumPy linspace() 参数

  • start:序列的起始值。
  • stop:序列的结束值。
  • num(可选):指定样本数量。默认值为 50,且必须为非负数。
  • endpoint(可选):若为 True(默认),则 stop 为最后一个样本。若为 False,则生成的序列不包含 stop 值。这意味着函数会在从 start 到接近 stop 的范围内生成等间距样本,但不包含 stop 本身。当您需要逼近而不触及区间端点的范围时,这非常有用,便于更灵活地控制生成值的范围。
  • retstep(可选):若为 True,返回 (samples, step),其中 step 为相邻样本之间的间距。
  • dtype(可选):输出数组的数据类型。若未指定,dtype 将由 start 和 stop 推断。
  • axis(可选):在结果中存放样本的轴,仅在处理多维数组时使用。

使用 linspace() 创建一维数组

了解了 linspace() 的各个参数后,我们来看几个实际示例!

用 linspace() 创建等间距的一维数组

此示例创建一个在 0 到 10 之间等间距的 7 个数字组成的数组。

import numpy as np

# Create an array of 7 evenly spaced elements from 0 to 10
uniform_array = np.linspace(0, 10, num=7)
print("Uniform Array")
uniform_array
Uniform Array
array([ 0., 1.66666667, 3.33333333, 5., 6.66666667,8.33333333, 10.])

在等间距一维数组中排除终点(使用 linspace())

在这个例子中,我们生成一个 10 到 20 之间包含 8 个数字的数组,但将最终值(20)排除在外,以展示 endpoint 参数的效果。

import numpy as np


# Create an array of 8 elements from 10 to 20, excluding 20
exclude_final_array = np.linspace(10, 20, num=8, endpoint=False)
print("Array Excluding Final Value")
exclude_final_array
Array Excluding Final Value
array([10. , 11.25, 12.5 , 13.75, 15. , 16.25, 17.5 , 18.75])

在等间距一维数组中包含步长信息(使用 linspace())

这里我们创建一个从 -5 到 5 的 4 个元素的数组,同时获取并显示步长。

import numpy as np


# Create an array of 4 elements from -5 to 5 and capture the step size
step_array, step = np.linspace(-5, 5, num=4, retstep=True)
print("Array with Defined Step Size", step_array)
print("Step Size", step)
Array with Defined Step Size [-5.         -1.66666667  1.66666667  5.        ]
Step Size 3.3333333333333335

使用 linspace() 创建 N 维数组

linspace() 也可用于生成多维数组。下面展示几个相关示例。

使用 linspace() 生成二维数组

此示例展示如何生成一个二维数组,使每一行都从向量 [0, 10] 平滑过渡到 [5, 15],在 4 个步长内形成渐变效果。

import numpy as np


# Perform column-wise linear interpolation from [10, 20] to [15, 25] over 3 steps
column_interpolation_array = np.linspace([10, 20], [15, 25], num=3, axis=1)
print("Column-wise Interpolation Array:")
print(column_interpolation_array)
Column-wise Interpolation Array:
[[10.  12.5 15. ]
 [20.  22.5 25. ]]

NumPy linspace() 的替代方案

虽然 linspace() 非常实用,但也有一些可考虑的替代方案,比如 NumPy 的 arange() 函数和列表推导式。

使用 NumPy 的 arange() 函数

arange() 会在给定区间内生成数值。与 linspace() 不同,arange() 指定的是步长而非元素个数。

# Using arange to generate values from 0 to 10, spaced by 2
arange_example = np.arange(0, 10, 2)
arange_example

# Returns array([0, 2, 4, 6, 8])

# Using linspace() to generate values from 0 to 10, with interval set to 2
linspace_example = np.linspace(0, 10, 2)
linspace_example

# Returns array([0.,10.0])

使用列表推导式

列表推导式提供了一种更具 Python 风格 的列表生成方式,但缺乏 NumPy linspace() 的向量化优势和灵活性。

list_comp = [x for x in range(10)]
print(list_comp)

# Outputs [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

总结

NumPy 的 linspace() 是数据科学工具箱中的基础工具,能精确且灵活地生成数值序列。若您想进一步提升 NumPy 技能,请查看这篇关于 NumPy 数组 的教程、这份 NumPy 速查表,或考虑报名我们的 Introduction to NumPy 课程。

Adel Nehme

作者

Adel Nehme

Adel 是一位数据科学教育者、演讲者,以及 DataCamp 的媒体副总裁。他推出了多门关于数据分析、机器学习和数据工程的课程与直播培训,热衷于在组织内推广数据技能与数据素养,并关注技术与社会的交汇。他拥有数据科学与商业分析硕士学位。闲暇时,您常能发现他陪他的猫 Louis 一起玩耍。

主题