NumPy常用30个经典案例

在这里插入图片描述


包含编程资料、学习路线图、源代码、软件安装包等!【[点击这里]】!

在这里插入图片描述

NumPy (Numerical Python) 是 Python 中用于数值计算的核心库。它提供了高性能的多维数组对象"ndarray",以及大量的数学函数来操作这些数组。NumPy 是科学计算、数据分析和机器学习等领域的基础工具。本文将介绍 30 个 NumPy 常用经典案例,帮助读者快速掌握 NumPy 的核心功能。

准备工作:
  • 首先,确保你已经安装了 NumPy 库。如果没有安装,可以使用 pip 命令安装:
pip install numpy   
  • 然后在 Python 代码中导入 NumPy 库:
import numpy as np   

一、数组创建 (5 例)

  • NumPy 提供了多种创建数组的方法,灵活高效。
案例 1: 使用"array()"创建数组
# 数据   
data = [1, 2, 3, 4, 5]      
# 代码   
arr = np.array(data)      
# 注释   
# np.array() 函数可以从列表、元组或其他序列型对象创建数组。   
# 这里我们从 Python 列表 'data' 创建了一个 NumPy 数组 'arr'。      
print(arr)   
print(type(arr))
案例 2: 使用"arange()"创建等差数组
# 代码   
arr = np.arange(0, 10, 2)      
# 注释   
# np.arange(start, stop, step) 函数创建等差数组。   
# 'start' 是起始值(包含),'stop' 是终止值(不包含),'step' 是步长。   
# 这里我们创建了一个从 0 到 10 (不包含) ,步长为 2 的数组。      
print(arr)   
案例 3: 使用"zeros()"创建全零数组
# 代码   
arr_zeros = np.zeros((3, 4))      
# 注释   
# np.zeros(shape) 函数创建指定形状的全零数组。   
# 'shape' 是数组的形状,可以是元组或整数。   
# 这里我们创建了一个 3 行 4 列的全零二维数组。      
print(arr_zeros) 
案例 4: 使用"ones()"创建全一数组
# 代码   
arr_ones = np.ones((2, 5), dtype=int)      
# 注释   
# np.ones(shape, dtype=float) 函数创建指定形状的全一数组,默认数据类型是 float。   
# 可以通过 'dtype' 参数指定数据类型,这里我们指定为整数 int。   
# 我们创建了一个 2 行 5 列的全一整数二维数组。      
print(arr_ones)   
案例 5: 使用"linspace()"创建线性等分数组
# 代码   
arr_linspace = np.linspace(0, 1, 5)      
# 注释   
# np.linspace(start, stop, num) 函数创建线性等分数组。   
# 'start' 是起始值,'stop' 是终止值,'num' 是元素个数(包含起始和终止值)。   
# 这里我们创建了一个从 0 到 1 (包含) ,包含 5 个元素的线性等分数组。      
print(arr_linspace) 

二、数组属性 (3 例)

  • 了解数组的属性对于理解和操作数组至关重要
案例 6: 查看数组形状"shape"
# 数据   
arr = np.array([[1, 2, 3], [4, 5, 6]])      
# 代码   shape = arr.shape      
# 注释   
# 'shape' 属性返回数组的形状,以元组形式表示。   
# 对于二维数组,形状表示 (行数, 列数)。      
print(arr)   
print("数组形状:", shape)   
案例 7: 查看数组数据类型"dtype"
# 数据   
arr = np.array([1.0, 2.0, 3.0])      
# 代码   
dtype = arr.dtype      
# 注释   
# 'dtype' 属性返回数组元素的数据类型。   
# NumPy 数组的数据类型可以是 int, float, bool, object 等。      
print(arr)   
print("数组数据类型:", dtype)   
案例 8: 查看数组维度"ndim"和元素个数"size"
# 数据   
arr_3d = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])      
# 代码   
ndim = arr_3d.ndim   size = arr_3d.size      
# 注释   
# 'ndim' 属性返回数组的维度 (轴的个数)。   
# 'size' 属性返回数组中元素的总个数。      
print(arr_3d)   
print("数组维度:", ndim)   
print("数组元素个数:", size)   

三、索引与切片 (4 例)

  • NumPy 数组的索引和切片操作非常灵活,可以方便地访问和修改数组元素。
案例 9: 一维数组索引
# 数据   
arr = np.arange(10)      
# 代码   
element = arr[5]      
# 注释   
# 一维数组的索引与 Python 列表类似,使用方括号 [] 和索引值访问元素。   
# 索引从 0 开始。      
print(arr)   
print("索引为 5 的元素:", element)   
案例 10: 二维数组索引
# 数据   
arr_2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])      
# 代码   
element = arr_2d[1, 2] # 或 arr_2d[1][2]      
# 注释   
# 二维数组的索引使用两个索引值,分别表示行索引和列索引。   
# 可以使用 arr_2d[行索引, 列索引] 或 arr_2d[行索引][列索引] 的方式访问元素。      
print(arr_2d)   
print("第二行第三列的元素:", element)   
案例 11: 一维数组切片
# 数据   
arr = np.arange(10)      
# 代码   
slice_arr = arr[2:7]      
# 注释   
# 一维数组的切片使用 [start:stop:step] 的形式。   
# 'start' 是起始索引(包含),'stop' 是终止索引(不包含),'step' 是步长(可选)。   
# 这里我们切片出索引从 2 到 7 (不包含) 的元素。      
print(arr)   
print("切片结果:", slice_arr)   
案例 12: 二维数组切片
# 数据   
arr_2d = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])      
# 代码   
slice_arr = arr_2d[:2, 1:3]      
# 注释   
# 二维数组的切片可以同时对行和列进行切片。   
# arr_2d[:2, 1:3] 表示切片前两行 (索引 0 和 1) 的,以及列索引从 1 到 3 (不包含) 的部分。      
print(arr_2d)   
print("切片结果:")   
print(slice_arr)   

四、数组运算 (6 例)

  • NumPy 数组支持元素级别的算术运算,以及广播机制,使得运算更加简洁高效。
案例 13: 数组与标量的加法
# 数据   
arr = np.arange(5)      
# 代码   
result = arr + 2      
# 注释   
# 数组与标量进行算术运算时,标量会广播到数组的每个元素上。   
# 这里我们将数组 'arr' 的每个元素都加上 2。      
print(arr)   
print("数组加标量结果:", result)   
案例 14: 数组与数组的加法
# 数据   
arr1 = np.array([1, 2, 3])   
arr2 = np.array([4, 5, 6])      
# 代码   
result = arr1 + arr2      
# 注释   
# 两个形状相同的数组进行算术运算时,会对对应位置的元素进行运算。   
# 这里我们将数组 'arr1' 和 'arr2' 对应位置的元素相加。      
print("数组1:", arr1)   
print("数组2:", arr2)   
print("数组相加结果:", result)   
案例 15: 数组的元素乘法和矩阵乘法
# 数据   
arr1 = np.array([[1, 2], [3, 4]])   
arr2 = np.array([[5, 6], [7, 8]])      
# 代码   
element_product = arr1 * arr2 # 元素级别乘法   
matrix_product = np.dot(arr1, arr2) # 矩阵乘法      
# 注释   
# '*' 运算符执行元素级别的乘法,即对应位置的元素相乘。   
# np.dot(a, b) 函数执行矩阵乘法。      
print("数组1:\n", arr1)   
print("数组2:\n", arr2)   
print("元素级别乘法结果:\n", element_product)   
print("矩阵乘法结果:\n", matrix_product)   
案例 16: 数组的比较运算
# 数据   
arr1 = np.array([1, 2, 3, 4, 5])   
arr2 = np.array([3, 2, 5, 1, 4])      
# 代码   
equal_arr = arr1 == arr2   
greater_arr = arr1 > arr2      
# 注释   
# 数组的比较运算会返回一个布尔型数组,表示对应位置元素的比较结果。   
# '==' 比较是否相等, '>' 比较是否大于。      
print("数组1:", arr1)   
print("数组2:", arr2)   
print("相等比较结果:", equal_arr)   
print("大于比较结果:", greater_arr)   
案例 17: 广播机制的应用
# 数据   
arr_1d = np.array([1, 2, 3])   
arr_2d = np.array([[1, 2, 3], [4, 5, 6]])      
# 代码   
result = arr_2d + arr_1d      
# 注释   
# 广播机制允许形状不完全相同的数组进行运算。   
# 在这里,'arr_1d' 的形状 (3,) 会广播到 'arr_2d' 的每一行,使得两个数组可以相加。      
print("一维数组:", arr_1d)   
print("二维数组:\n", arr_2d)   
print("广播相加结果:\n", result)   
案例 18: 通用函数 (ufunc)
# 数据   
arr = np.arange(1, 6)      
# 代码   
sqrt_arr = np.sqrt(arr)   
exp_arr = np.exp(arr)      
# 注释   
# NumPy 提供了大量的通用函数 (ufunc),可以对数组进行元素级别的操作。   
# np.sqrt(arr) 计算数组元素的平方根,np.exp(arr) 计算数组元素的指数。      
print(arr)   
print("平方根结果:", sqrt_arr)   
print("指数结果:", exp_arr)   

五、常用函数 (7 例)

  • NumPy 提供了丰富的函数,用于数组的统计、排序、查找等操
案例 19: 求和"sum()"
# 数据   
arr = np.arange(1, 10).reshape((3, 3))      
# 代码   
sum_all = np.sum(arr) # 所有元素求和   
sum_axis0 = np.sum(arr, axis=0) # 按列求和   
sum_axis1 = np.sum(arr, axis=1) # 按行求和      
# 注释   
# np.sum(arr, axis=None) 函数计算数组元素的和。   
# axis=None (默认) 对所有元素求和,axis=0 按列求和,axis=1 按行求和。      
print("数组:\n", arr)   
print("所有元素求和:", sum_all)   
print("按列求和:", sum_axis0)   
print("按行求和:", sum_axis1)   
案例 20: 求均值"mean()"
# 数据   
arr = np.array([[1, 2, 3], [4, 5, 6]])      
# 代码   
mean_all = np.mean(arr) # 所有元素求均值   
mean_axis0 = np.mean(arr, axis=0) # 按列求均值      
# 注释   
# np.mean(arr, axis=None) 函数计算数组元素的均值。   
# axis 参数的用法与 np.sum() 类似。      
print("数组:\n", arr)   
print("所有元素均值:", mean_all)   
print("按列求均值:", mean_axis0)   
案例 21: 求最大值"max()“和最小值"min()”
# 数据   
arr = np.random.randint(1, 10, size=(3, 4)) # 生成随机整数数组      
# 代码   
max_val = np.max(arr) # 最大值   
min_val = np.min(arr) # 最小值      
# 注释   
# np.max(arr) 和 np.min(arr) 分别计算数组的最大值和最小值。      
print("数组:\n", arr)   
print("最大值:", max_val)   
print("最小值:", min_val)   
案例 22: 查找最大值和最小值的索引"argmax()“和"argmin()”
# 数据   
arr = np.array([3, 1, 4, 1, 5, 9, 2, 6])      
# 代码   
argmax_index = np.argmax(arr) # 最大值索引   
argmin_index = np.argmin(arr) # 最小值索引      
# 注释   
# np.argmax(arr) 和 np.argmin(arr) 分别返回最大值和最小值在数组中的索引。      
print("数组:", arr)   
print("最大值索引:", argmax_index)   
print("最小值索引:", argmin_index)   
案例 23: 排序"sort()"
# 数据   
arr = np.random.randint(1, 20, size=10) # 生成随机整数数组      
# 代码   
sorted_arr = np.sort(arr) # 排序后的数组   
arr.sort() # 原地排序,修改原数组      
# 注释   
# np.sort(arr) 返回排序后的新数组,不修改原数组。   
# arr.sort() 原地排序,直接修改原数组。      
print("原始数组:", arr) # 注意:arr 已经被原地排序修改了   
print("排序后的数组:", sorted_arr)   
案例 24: 去重"unique()
# 数据   
arr = np.array([1, 2, 2, 3, 3, 3, 4, 4, 4, 4])      
# 代码   
unique_arr = np.unique(arr)      
# 注释   
# np.unique(arr) 函数返回数组中的唯一值,并排序。      
print("原始数组:", arr)   
print("去重后的数组:", unique_arr)   
案例 25: 条件查找"where()
# 数据   
arr = np.arange(10)      
# 代码   
indices = np.where(arr > 5)   
values = arr[np.where(arr > 5)] # 或直接 arr[arr > 5]      
# 注释   
# np.where(condition) 函数返回满足条件的元素的索引。   
# 可以使用返回的索引来提取满足条件的值。      
print("数组:", arr)   
print("大于 5 的元素索引:", indices)   
print("大于 5 的元素值:", values)   

六、线性代数 (5 例)

  • NumPy 的"linalg"子模块提供了常用的线性代数运算功能。
案例 26: 矩阵转置"T"或 “transpose()”
# 数据   
matrix = np.array([[1, 2, 3], [4, 5, 6]])      
# 代码   
transposed_matrix = matrix.T # 使用 .T 属性   
# transposed_matrix = matrix.transpose() 
# 使用 transpose() 函数      
# 注释   
# .T 属性和 transpose() 函数都可以返回矩阵的转置。      
print("原始矩阵:\n", matrix)   
print("转置矩阵:\n", transposed_matrix)   
案例 27: 矩阵的迹"trace()"
# 数据   
matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])      
# 代码   
trace_val = np.trace(matrix)      
# 注释   
# np.trace(matrix) 函数计算矩阵的迹 (主对角线元素之和)。      
print("矩阵:\n", matrix)   
print("矩阵的迹:", trace_val)   
案例 28: 计算行列式"linalg.det()"
# 数据   
matrix = np.array([[1, 2], [3, 4]])      
# 代码   
determinant = np.linalg.det(matrix)      
# 注释   
# np.linalg.det(matrix) 函数计算矩阵的行列式。      
print("矩阵:\n", matrix)   
print("行列式:", determinant)   
案例 29: 计算逆矩阵"linalg.inv()"
# 数据   
matrix = np.array([[1, 2], [3, 4]])      
# 代码   
inverse_matrix = np.linalg.inv(matrix)      
# 注释   
# np.linalg.inv(matrix) 函数计算矩阵的逆矩阵。   
# 只有可逆矩阵 (行列式不为 0) 才能计算逆矩阵。      
print("原始矩阵:\n", matrix)   
print("逆矩阵:\n", inverse_matrix)   
案例 30: 计算特征值和特征向量"linalg.eig()
# 数据   
matrix = np.array([[1, -2], [2, -3]])      
# 代码  
eigenvalues, eigenvectors = np.linalg.eig(matrix)      
# 注释   
# np.linalg.eig(matrix) 函数计算矩阵的特征值和特征向量。   
# 返回值 eigenvalues 是特征值数组,eigenvectors 是特征向量矩阵 (列向量为特征向量)。      
print("矩阵:\n", matrix)   
print("特征值:", eigenvalues)   
print("特征向量:\n", eigenvectors)   

  • 本文介绍了 NumPy 中常用的 30 个经典案例,涵盖了数组创建、属性查看、索引切片、数组运算、常用函数和线性代数等核心功能。 通过学习这些案例,大家可以快速入门 NumPy,为后续的科学计算和数据分析任务打下基础。
    图片

总结

  • 最后希望你编程学习上不急不躁,按照计划有条不紊推进,把任何一件事做到极致,都是不容易的,加油,努力!相信自己!

文末福利

  • 最后这里免费分享给大家一份Python全套学习资料,希望能帮到那些不满现状,想提升自己却又没有方向的朋友,也可以和我一起来学习交流呀。
包含编程资料、学习路线图、源代码、软件安装包等!【[点击这里]】领取!
  • ① Python所有方向的学习路线图,清楚各个方向要学什么东西
  • ② 100多节Python课程视频,涵盖必备基础、爬虫和数据分析
  • ③ 100多个Python实战案例,学习不再是只会理论
  • ④ 华为出品独家Python漫画教程,手机也能学习

可以扫描下方二维码领取【保证100%免费在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值