目录
NumPy模块介绍
NumPy 是 Python 科学计算领域的重要基石,与当前 “躺吃旅行” 话题看似不相关,但在数据处理分析上意义重大。我将从它的核心功能、应用场景和优势等方面展开介绍。
NumPy(Numerical Python)是 Python 语言中用于科学计算的基础库,它提供了高性能的多维数组对象以及大量用于对数组进行操作的函数,是数据科学、机器学习、人工智能等领域不可或缺的工具。NumPy 的核心数据结构是ndarray(多维数组),这种数组允许在内存中以连续的方式存储同类型的数据,相较于 Python 原生列表,它在存储和运算效率上有着显著提升。通过 NumPy,用户可以轻松实现数组的创建、索引、切片、变形,以及各种数学运算,如矩阵乘法、统计计算、傅里叶变换等。
在实际应用中,NumPy 广泛应用于数据分析、机器学习算法的底层实现、图像和信号处理等领域。例如,在机器学习中,数据集通常会被加载并转换为 NumPy 数组进行预处理和模型训练;在图像处理中,图像数据也会被表示为多维数组,借助 NumPy 提供的函数完成图像的滤波、变换等操作。此外,NumPy 还与众多科学计算库紧密集成,如 SciPy、Pandas 等,共同构建起强大的 Python 科学计算生态,极大地提升了数据处理和分析的效率。
本期课程,我将从概念、逻辑、实操、应用4各层面阐释我对这个模块的理解,希望为喜欢Python的学习者提供一个内容详实、逻辑清晰、容易上手的课程。
3.1 NumPy 数组创建方法详解
3.1.1 课程目标
通过本课件的学习,掌握使用 NumPy 库创建不同类型数组的方法,包括使用array()函数创建数组、arange()函数生成等差数组、创建随机数组以及生成特殊数组,并能灵活运用相关参数。
3.1.2 使用array()函数创建数组
array()函数是 NumPy 中最基本的创建数组的函数,它可以将 Python 的列表、元组等可迭代对象转换为 NumPy 数组。
案例 1:创建一维数组
import numpy as np
list_data = [1, 2, 3, 4, 5]
arr_1d = np.array(list_data)
print(arr_1d)
在这个案例中,我们将 Python 列表list_data传递给np.array()函数,创建了一个一维数组。np.array()函数会自动识别列表中元素的类型,并创建相应类型的数组。
案例 2:创建二维数组
import numpy as np
matrix_data = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
arr_2d = np.array(matrix_data)
print(arr_2d)
这里使用一个包含列表的列表matrix_data作为参数,np.array()函数将其转换为二维数组。二维数组在矩阵运算等场景中非常常用。
案例 3:指定数据类型创建数组
import numpy as np
float_list = [1.1, 2.2, 3.3]
arr_float = np.array(float_list, dtype=np.int32)
print(arr_float)
通过dtype参数指定数组的数据类型,本案例将包含浮点数的列表转换为int32类型的数组,数据会按照类型转换规则进行转换 。
小贴士:array () 函数的语法格式和参数含义详解
array()函数完整语法为np.array(object, dtype=None, copy=True, order='K', subok=False, ndmin=0),各参数具体含义如下:
object:必填参数,传入的可迭代对象,如列表、元组等,np.array()函数会根据这个对象创建数组。例如np.array([1, 2, 3]),[1, 2, 3]就是object。
dtype:可选参数,用于指定创建数组的数据类型。若不指定,函数会根据object中元素类型自动推断。比如np.array([1, 2, 3], dtype=np.float32),强制将数组元素类型设为float32。
copy:可选参数,默认为True,表示复制输入数据创建新数组;若为False,在某些情况下会返回输入数据的视图,不进行数据复制。例如,当输入数据本身就是 NumPy 数组且copy=False时,不会产生新的内存空间。
order:可选参数,指定数组在内存中的存储顺序,取值有'C'(按行优先,类似 C 语言数组存储方式)、'F'(按列优先,类似 Fortran 语言数组存储方式)、'K'(按元素在内存中出现的顺序存储)。默认值为'K' 。
subok:可选参数,默认为False,表示返回的数组类型是基础的ndarray;若为True,则返回的数组类型可能是ndarray的子类。
ndmin:可选参数,指定创建数组的最小维度。例如np.array([1, 2, 3], ndmin=2),会将原本的一维数组转换为至少二维的数组,即[[1, 2, 3]]。
使用array()函数时需注意,若object中元素类型不一致,会按照类型转换规则将元素统一转换为能容纳所有元素的 “宽泛” 类型。例如np.array([1, '2']),最终数组元素类型会被转换为字符串类型。
3.1.3 使用arange()函数生成等差数组
arange()函数类似于 Python 内置的range()函数,用于生成等差数组。它的基本语法为np.arange(start, stop, step),其中start为起始值(包含),stop为终止值(不包含),step为步长。
案例 1:默认步长生成数组
import numpy as np
arr_arange_1 = np.arange(10)
print(arr_arange_1)
当不指定start和step时,默认start=0,step=1,该案例生成了从 0 到 9 的一维数组。
案例 2:指定起始值、终止值和步长
import numpy as np
arr_arange_2 = np.arange(2, 10, 2)
print(arr_arange_2)
此案例中,起始值为 2,终止值为 10(不包含),步长为 2,生成了包含 2、4、6、8 的数组。
案例 3:生成浮点数等差数组
import numpy as np
arr_arange_3 = np.arange(0.5, 2.5, 0.5)
print(arr_arange_3)
通过设置合适的起始值、终止值和步长,arange()函数也可以生成包含浮点数的等差数组。
小贴士:arange () 函数的语法格式和参数含义详解
arange()函数完整语法为np.arange([start, ]stop[, step, ]dtype=None),各参数具体含义如下:
start:可选参数,指定数列起始值,省略时默认从 0 开始。例如np.arange(5),实际等同于np.arange(0, 5, 1)。
stop:必填参数,指定数列终止值(不包含在生成的数组内) ,如np.arange(1, 5)会生成包含 1、2、3、4 的数组。
step:可选参数,指定数列的步长,即相邻两个元素的差值,省略时默认步长为 1。比如np.arange(1, 10, 3)生成的数组为[1, 4, 7]。
dtype:可选参数,用于指定生成数组的数据类型。若不指定,arange()函数会根据start、stop、step的值自动推断数据类型。例如np.arange(1.0, 5.0, 0.5, dtype=np.float32),明确指定生成float32类型的数组。
使用arange()函数时需注意:当step为正数,start必须小于stop;当step为负数,start必须大于stop,否则将生成空数组。另外,若涉及浮点数步长,由于计算机对浮点数的存储存在精度问题,可能出现结果与预期略有偏差的情况,可通过np.linspace()函数(用于创建指定数量等间距元素的数组)作为替代方案。
3.1.4 创建随机数组
1. 使用random.rand()函数
np.random.rand()函数用于创建指定形状的数组,数组元素服从 [0, 1) 区间的均匀分布。
案例 1:创建一维随机数组
import numpy as np
rand_arr_1d = np.random.rand(5)
print(rand_arr_1d)
参数5表示生成包含 5 个元素的一维随机数组。
案例 2:创建二维随机数组
import numpy as np
rand_arr_2d = np.random.rand(3, 4)
print(rand_arr_2d)
(3, 4)表示生成 3 行 4 列的二维随机数组。
案例 3:创建三维随机数组
import numpy as np
rand_arr_3d = np.random.rand(2, 3, 4)
print(rand_arr_3d)
(2, 3, 4)表示生成一个具有 2 个 3 行 4 列矩阵的三维随机数组。
2. 使用random.randn()函数
np.random.randn()函数生成的数组元素服从标准正态分布(均值为 0,标准差为 1)。
案例 1:一维标准正态分布随机数组
import numpy as np
randn_arr_1d = np.random.randn(4)
print(randn_arr_1d)
生成包含 4 个服从标准正态分布元素的一维数组。
案例 2:二维标准正态分布随机数组
import numpy as np
randn_arr_2d = np.random.randn(2, 3)
print(randn_arr_2d)
生成 2 行 3 列的二维标准正态分布随机数组。
案例 3:多维标准正态分布随机数组
import numpy as np
randn_arr_3d = np.random.randn(2, 2, 2)
print(randn_arr_3d)
创建一个形状为 (2, 2, 2) 的三维标准正态分布随机数组。
3. 使用random.randint()函数
np.random.randint()函数用于生成指定范围内的随机整数数组,其语法为np.random.randint(low, high=None, size=None, dtype='l')。其中,low为生成随机数的最小值(包含);当high不为None时,high为生成随机数的最大值(不包含),若high=None,则low作为最大值,最小值取 0;size用于指定生成数组的形状;dtype指定生成数组的数据类型。
案例 1:生成一维随机整数数组
import numpy as np
arr_randint_1d = np.random.randint(1, 10, size=5)
print(arr_randint_1d)
该案例中,生成的随机整数范围是 1(包含)到 10(不包含),生成的是包含 5 个元素的一维数组。运行代码后,可能得到类似[2, 7, 4, 8, 3]的结果 。
案例 2:生成二维随机整数数组
import numpy as np
arr_randint_2d = np.random.randint(5, 15, size=(3, 4))
print(arr_randint_2d)
此案例生成的随机整数范围在 5(包含)到 15(不包含)之间,size=(3, 4)表示生成一个 3 行 4 列的二维随机整数数组。执行代码后,输出结果可能是类似[[ 8, 11, 9, 12], [ 6, 7, 14, 5], [13, 8, 10, 11]]的二维数组。
案例 3:指定数据类型生成随机整数数组
import numpy as np
arr_randint_type = np.random.randint(0, 20, size=6, dtype=np.uint8)
print(arr_randint_type)
在这个案例中,通过dtype=np.uint8指定生成的数据类型为无符号 8 位整数,随机整数范围是 0(包含)到 20(不包含),生成包含 6 个元素的一维数组。运行后,可能得到[ 7 13 0 19 14 3]这样的结果,数组中每个元素都是uint8类型。
3.1.5 使用函数生成特殊数组
1. zeros()函数
np.zeros()函数用于创建指定形状且元素全为 0 的数组,语法为np.zeros(shape, dtype=float),shape指定数组形状,dtype指定数据类型。
案例 1:一维全 0 数组
import numpy as np
zeros_1d = np.zeros(5)
print(zeros_1d)
生成包含 5 个元素的一维全 0 数组。
案例 2:二维全 0 数组
import numpy as np
zeros_2d = np.zeros((3, 4))
print(zeros_2d)
创建 3 行 4 列的二维全 0 数组。
案例 3:指定数据类型的全 0 数组
import numpy as np
zeros_int = np.zeros(5, dtype=np.int32)
print(zeros_int)
生成包含 5 个int32类型元素的全 0 数组。
2. ones()函数
np.ones()函数与zeros()函数类似,用于创建指定形状且元素全为 1 的数组,语法为np.ones(shape, dtype=float) 。
案例 1:一维全 1 数组
import numpy as np
ones_1d = np.ones(6)
print(ones_1d)
生成 6 个元素的一维全 1 数组。
案例 2:二维全 1 数组
import numpy as np
ones_2d = np.ones((2, 3))
print(ones_2d)
创建 2 行 3 列的二维全 1 数组。
案例 3:多维全 1 数组
import numpy as np
ones_3d = np.ones((2, 2, 2))
print(ones_3d)
生成形状为 (2, 2, 2) 的三维全 1 数组。
3. eye()函数
np.eye()函数用于创建单位矩阵,即主对角线元素为 1,其余元素为 0 的方阵,语法为np.eye(N, M=None, k=0, dtype=),N表示行数,M表示列数(默认与N相同),k表示对角线的偏移量。
案例 1:创建 3 阶单位矩阵
import numpy as np
eye_matrix = np.eye(3)
print(eye_matrix)
生成一个 3 行 3 列的单位矩阵。
案例 2:创建指定行列的矩阵
import numpy as np
matrix = np.eye(2, 4)
print(matrix)
创建 2 行 4 列,主对角线为 1 的矩阵。
案例 3:创建偏移对角线矩阵
import numpy as np
offset_matrix = np.eye(4, k=1)
print(offset_matrix)
k=1表示主对角线向上偏移 1 个位置,生成相应的矩阵。
3.1.6 知识总结与课程回顾
通过本课件的学习,我们系统地了解了使用 NumPy 创建数组的多种方法,包括array()函数、arange()函数、随机数组创建函数以及生成特殊数组的函数。在实际应用中,根据不同的需求选择合适的方法创建数组,能够更高效地进行数据处理和科学计算。
这份课件涵盖了多种创建 NumPy 数组的方法。你若觉得案例数量、讲解深度需要调整,或者还有其他意见和建议,欢迎随时交流。