Python NumPy入门教程(附带实例)
NumPy(Numerical Python)是 Python 中用于科学计算的一个开源库,提供了一个强大的多维数组对象(Ndarray),以及一系列用于数组操作的函数。
NumPy 是许多科学计算和数据分析库的基础,包括 SciPy、Pandas、Matplotlib 等。
1) 使用 numpy.array() 函数可以从 Python 列表创建 NumPy 数组。
【实例 1】从列表创建数组。依次输入以下代码,并观察输出结果。
2) 使用特定函数创建。NumPy 提供了一些特定的函数用于创建特定类型的数组,如下表所示。
【实例 2】利用特定函数创建数组。依次输入以下代码,并观察输出结果。
【实例 3】对于一维数组,可以使用整数索引来访问单个元素,使用切片来访问子数组。
【实例 4】对于多维数组,可以使用逗号分隔的索引元组来访问特定元素,也可以对不同维度进行切片。
【实例 5】使用布尔数组可以进行索引,从而选择满足特定条件的元素。
【实例 6】使用整数数组或整数列表可以进行索引,从而选择特定位置的元素。
【实例 7】在切片操作中,如果省略了起始索引,则默认为 0;如果省略了结束索引,则默认为数组的长度;如果省略了步长,则默认为 1。
【实例 8】改变形状。利用 reshape() 函数可以改变数组的形状,返回一个具有新形状的数组,但不改变原始数组。利用 flatten() 可以将多维数组变为一维数组。
【实例 8】转置数组。利用 transpose() 函数可以对数组的维度进行转置。.T 属性的功能与 transpose() 相同,其使用更简洁。
【实例 9】扩展维度。利用 newaxis 属性可以在数组的特定位置增加一个维度。
【实例 10】连接和分裂。利用 concatenate() 函数可以连接多个数组。
【实例 11】重复和堆叠:利用 repeat() 函数可以重复数组中的元素。利用 tile() 函数可以将数组沿指定轴堆叠。
【实例 12】排序:利用 sort() 函数可以对数组进行排序。
【实例 13】算术运算。NumPy 允许对数组执行标准的算术运算,如加法、减法、乘法和除法等。这些运算可以逐元素进行,也可以与标量进行运算。
【实例 14】逻辑运算。NumPy 允许对数组进行逻辑运算,如逻辑与、逻辑或和逻辑非等。
【实例 15】数学函数运算。NumPy 提供了大量的数学函数,如平方函数、开方函数、指数函数、对数函数等,这些函数可以逐元素应用于数组。
NumPy 是许多科学计算和数据分析库的基础,包括 SciPy、Pandas、Matplotlib 等。
NumPy数组的创建
NumPy数组的创建可以通过多种方式实现,以下是一些常用的方法。1) 使用 numpy.array() 函数可以从 Python 列表创建 NumPy 数组。
【实例 1】从列表创建数组。依次输入以下代码,并观察输出结果。
import numpy as np arr1 = np.array([1, 2, 3, 4, 5]) # 从列表创建一维数组 arr2 = np.array([[1, 2, 3], [4, 5, 6]]) # 从列表创建二维数组
2) 使用特定函数创建。NumPy 提供了一些特定的函数用于创建特定类型的数组,如下表所示。
功能 | 描述 |
---|---|
全0数组 |
numpy.zeros(shape, dtype=float, order='C') 创建一个指定形状和数据类型的全零数组 |
全1数组 |
numpy.ones(shape, dtype=None, order='C') 创建一个指定形状和数据类型的全1数组 |
指定形状的常数数组 |
numpy.full(shape, fill_value, dtype=None, order='C') 创建一个指定形状、常数值和数据类型的数组 |
单位矩阵 |
numpy.eye(N, M=None, k=0, dtype=<class 'float'>, order='C') 创建一个 N×N 的单位矩阵,对角线元素为 1,其余为 0 |
对角矩阵 |
numpy.diag(v, k=0) 从一维数组中创建一个对角矩阵或获取对角线元素 |
等间隔数组 |
numpy.arange([start, ]stop, [step, ]dtype=None) 创建一个指定范围内的等间隔的一维数组 |
均匀分布数组 |
numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0) 创建一个在指定范围内均匀分布的一维数组 |
随机数组 |
numpy.random.rand(d0, d1, …, dn) 创建一个指定形状的随机数组,元素取值在[0,1)之间 |
随机数组 |
numpy.random.randn(d0, d1, …, dn) 创建一个指定形状的随机数组,元素取值符合标准正态分布 |
【实例 2】利用特定函数创建数组。依次输入以下代码,并观察输出结果。
import numpy as np zeros_arr = np.zeros((3, 3)) # 创建全为 0 的数组 ones_arr = np.ones(((2, 2)) # 创建全为 1 的数组 full_arr = np.full(((2, 3), 7) # 创建指定形状的常数数组 eye_arr = np.eye(3) # 创建单位矩阵 diag_arr = np.diag([1, 2, 3]) # 创建对角矩阵 range_arr = np.arange(0, 10, 2) # 创建一维数组,取值范围是 [0,10),步长为 2 linspace_arr = np.linspace(0, 1, 5) # 创建一个在 [0,1] 范围内均匀分布的数组,共 5 个元素 rand_arr = np.random.rand(2, 3) # 创建一个形状为 (2, 3) 的随机数组 randn_arr = np.random.randn(2, 3) # 创建一个形状为 (2, 3) 的随机数组
NumPy数组的索引与切片
在 NumPy 中,数组的索引和切片操作是非常重要的,基于此可以访问数组的特定元素或子集。索引和切片操作使得对数组的操作变得非常灵活和高效,可以方便地访问数组的特定元素或子集。【实例 3】对于一维数组,可以使用整数索引来访问单个元素,使用切片来访问子数组。
import numpy as np arr = np.array([1, 2, 3, 4, 5]) # 一维数组的索引 print(arr[0]) # 输出:1 print(arr[-1]) # 输出:5 # 一维数组的切片 print(arr[1:4]) # 输出:[2 3 4]
【实例 4】对于多维数组,可以使用逗号分隔的索引元组来访问特定元素,也可以对不同维度进行切片。
import numpy as np arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 多维数组的索引 print(arr[0, 0]) # 输出:1 print(arr[1, 2]) # 输出:6 # 多维数组的切片 print(arr[0:2, 1:3]) # 输出:[[2 3] # [5 6]]
【实例 5】使用布尔数组可以进行索引,从而选择满足特定条件的元素。
import numpy as np arr = np.array([1, 2, 3, 4, 5]) # 布尔索引 mask = arr > 2 print(arr[mask]) # 输出:[3 4 5]
【实例 6】使用整数数组或整数列表可以进行索引,从而选择特定位置的元素。
import numpy as np arr = np.array([1, 2, 3, 4, 5]) # 花式索引 indices = [0, 2, 4] print(arr[indices]) # 输出:[1 3 5]
【实例 7】在切片操作中,如果省略了起始索引,则默认为 0;如果省略了结束索引,则默认为数组的长度;如果省略了步长,则默认为 1。
import numpy as np arr = np.array([1, 2, 3, 4, 5]) print(arr[:3]) # 输出:[1 2 3] print(arr[2:]) # 输出:[3 4 5] print(arr[::2]) # 输出:[1 3 5]
NumPy数组的变换
在 NumPy 中,数组的变换指的是改变数组的形状、维度或顺序的操作。。NumPy提供了丰富的函数和方法来进行数组的变换操作,我们可以灵活地改变数组的形状、维度、顺序和内容,以满足不同的数据处理和分析需求【实例 8】改变形状。利用 reshape() 函数可以改变数组的形状,返回一个具有新形状的数组,但不改变原始数组。利用 flatten() 可以将多维数组变为一维数组。
import numpy as np # 导入 NumPy 库,并使用别名 np arr = np.arange(9) # 创建一个包含 0~8 的一维数组 print(arr) reshaped_arr = arr.reshape((3, 3)) # 将一维数组重塑为 3×3 的二维数组 print(reshaped_arr) flattened_arr = arr.flatten() # 将多维数组变为一维数组 print(flattened_arr)
【实例 8】转置数组。利用 transpose() 函数可以对数组的维度进行转置。.T 属性的功能与 transpose() 相同,其使用更简洁。
transposed_arr = arr.transpose() # 对数组进行转置操作 transposed_arr = arr.T # 简洁方式,使用 .T 属性进行转置操作
【实例 9】扩展维度。利用 newaxis 属性可以在数组的特定位置增加一个维度。
arr=np.array([1,2,3]) expanded_arr=arr[:,np.newaxis]
【实例 10】连接和分裂。利用 concatenate() 函数可以连接多个数组。
arr1=np.array([[1,2],[3,4]]) arr2=np.array([[5,6]]) concatenated_arr=np.concatenate((arr1,arr2),axis=0)利用 split() 函数可以将数组分裂为多个子数组。
subarrays=np.split(arr,3)
【实例 11】重复和堆叠:利用 repeat() 函数可以重复数组中的元素。利用 tile() 函数可以将数组沿指定轴堆叠。
repeated_arr=np.repeat(arr,3) tiled_arr=np.tile(arr,(2,3))
【实例 12】排序:利用 sort() 函数可以对数组进行排序。
sorted_arr=np.sort(arr)
NumPy基本运算
NumPy 中的基本运算指的是对数组进行算术运算、逻辑运算和数学函数运算等操作。NumPy 提供了丰富的函数和运算符来对数组进行操作。【实例 13】算术运算。NumPy 允许对数组执行标准的算术运算,如加法、减法、乘法和除法等。这些运算可以逐元素进行,也可以与标量进行运算。
import numpy as np arr1 = np.array([1, 2, 3]) arr2 = np.array([4, 5, 6]) sum_arr = arr1 + arr2 # 加法运算,同 np.add(arr1, arr2) diff_arr = arr1 - arr2 # 减法运算,同 np.subtract(arr1, arr2) prod_arr = arr1 * arr2 # 乘法运算,同 np.multiply(arr1, arr2) div_arr = arr1 / arr2 # 除法运算,同 np.divide(arr1, arr2)
【实例 14】逻辑运算。NumPy 允许对数组进行逻辑运算,如逻辑与、逻辑或和逻辑非等。
import numpy as np arr = np.array([True, False, True]) arr2 = np.array([False, True, False]) and_arr = arr & arr2 # 逻辑与,同 np.logical_and(arr, arr2) or_arr = arr | arr2 # 逻辑或,同 np.logical_or(arr, arr2) not_arr = ~arr # 逻辑非,同 np.logical_not(arr)
【实例 15】数学函数运算。NumPy 提供了大量的数学函数,如平方函数、开方函数、指数函数、对数函数等,这些函数可以逐元素应用于数组。
import numpy as np arr = np.array([1, 2, 3]) squared_arr = np.square(arr) # 平方函数 sqrt_arr = np.sqrt(arr) # 开方函数 exp_arr = np.exp(arr) # 指数函数 log_arr = np.log(arr) # 对数函数