ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

NumPy 科学计算全套实战练习题|从基础运算到数组进阶超全笔记

2026/8/23 18:19:47 拓冰建站 浏览量
NumPy 科学计算全套实战练习题|从基础运算到数组进阶超全笔记 一、前言这份练习覆盖 NumPy 最核心高频用法数组创建、统计运算、矩阵计算、随机数组、条件筛选、数组变形拼接、去重计数、业务场景综合案例非常适合新手入门巩固、面试复习查漏补缺每道题附带思路 可直接运行代码跟着敲一遍就能吃透基础 numpy 操作。NumPy 核心属性速查表在开始练习之前先快速了解 NumPy 数组ndarray的一些核心属性这些属性在数据处理中非常常用属性说明示例/返回值ndarray.shape数组的维度形状返回一个元组arr.shape→(3, 4)ndarray.ndim数组的维数轴的数量一维数组返回1二维数组返回2ndarray.size数组元素的总数arr.size→12对于 3×4 数组ndarray.dtype数组元素的数据类型arr.dtype→int32、float64等ndarray.itemsize每个元素占用的字节数arr.itemsize→8对于 float64ndarray.data包含实际数组元素的缓冲区通常不直接使用内存地址如memory at 0x...ndarray.T数组的转置行变列列变行arr.T返回转置后的数组ndarray.flags数组的内存布局信息如 C 连续、F 连续等包含C_CONTIGUOUS、F_CONTIGUOUS等标志ndarray.flat数组的一维迭代器用于遍历所有元素for x in arr.flat:ndarray.nbytes数组所有元素消耗的总字节数arr.nbytesarr.size * arr.itemsize掌握这些属性有助于你更好地理解和操作数组结构在后续的练习中会频繁用到shape、ndim、size、dtype等属性。NumPy 核心方法速查表除了属性NumPy 还提供了大量用于数组创建、操作和计算的常用方法。以下是一些核心方法的快速参考方法说明示例/返回值np.array()从列表、元组等创建数组np.array((1, 2, 3))→[1 2 3]np.array([1, 2, 3])→[1 2 3]np.zeros()创建全零数组np.zeros((2,3))→[[0. 0. 0.] [0. 0. 0.]]np.ones()创建全一数组np.ones((3,2))→[[1. 1.] [1. 1.] [1. 1.]]np.arange()创建等差序列数组np.arange(8)→[0 1 2 3 4 5 6 7]np.arange(0, 10, 2)→[0 2 4 6 8]np.linspace()创建等间隔数值数组np.linspace(0, 1, 5)→[0. 0.25 0.5 0.75 1. ]np.random.rand()生成 [0,1) 均匀分布随机数组np.random.rand(2,2)→ 2x2 随机浮点数np.random.randint()生成指定范围随机整数数组np.random.randint(0, 10, (3,3))→ 3x3 随机整数np.random.uniform()生成指定范围随机小数数组np.random.uniform(3, 9, (2,6))→ 2x6 随机小数np.astype()转换数组的数据类型arr.astype(np.float32)或arr.astype(int64)np.reshape()改变数组形状不改变数据arr.reshape((2,6))或np.reshape(arr, (2,6))np.concatenate()沿指定轴连接数组序列np.concatenate([a, b], axis0)np.hstack()/np.vstack()水平 / 垂直堆叠数组np.hstack([a, b]),np.vstack([a, b])np.split()将数组拆分为多个子数组np.split(arr, 3)将 arr 均分为 3 份np.mean()/np.sum()/np.std()计算均值 / 总和 / 标准差np.mean(arr, axis0)计算每列均值np.min()/np.max()返回数组最小值 / 最大值np.max(arr)返回整个数组最大值np.argmax()/np.argmin()返回最大值 / 最小值的索引np.argmax(arr)返回最大值的索引np.where()根据条件返回元素或进行替换np.where(arr 0, arr, 0)将负数替换为 0np.unique()返回数组中的唯一值已排序np.unique(arr, return_countsTrue)返回唯一值和计数np.dot()/矩阵乘法点积np.dot(A, B)或A Bnp.transpose()/.T转置数组arr.T或np.transpose(arr)np.sort()返回排序后的数组副本np.sort(arr, axis1)每行排序np.argsort()返回排序后的索引np.argsort(arr)返回排序索引掌握这些核心方法能让你在数据处理时更加得心应手。后续的练习题将大量运用这些方法。题目 1 温度数据分析需求某城市一周最高气温[28, 30, 29, 31, 32, 30, 29]计算平均气温、最高气温、最低气温统计气温超过 30℃的天数temper np.array([28,30,29,31,32,30,29]) print(temper) print(f平均气温{np.mean(temper):.3f}) print(平均气温%.3f % np.mean(temper)) print(f最高气温{np.max(temper)}) print(f最低气温{np.min(temper)}) print(f气温超过 30°C 的天数{len(temper[temper 30])}) np.where(条件,1,0) print(f气温超过 30°C 的天数{np.count_nonzero(np.where(temper 30 , 1 ,0))}) np.select(条件列表, 赋值列表, 默认值) print(f气温超过 30°C 的天数{np.count_nonzero(np.select([temper 30] ,[1],0))}) print(f气温超过 30°C 的天数{(temper30).sum()})题目 2 学生成绩统计需求5 名学生成绩[85, 90, 78, 92, 88]计算平均分、中位数、标准差分数缩放为百分制原题满分 10 分整体放大 10 倍score np.array([85,90,78,92,88]) print(f平均分{np.mean(score)}) print(np.sort(score)) print(f中位数{np.median(score)}) print(f标准差{np.std(score)}) print(score / 10)题目 3 矩阵基础运算给定矩阵A [[1,2],[3,4]]B [[5,6],[7,8]]矩阵相加、逐元素乘法矩阵点乘线性代数矩阵乘法A np.array(([1,2],[3,4])) B np.array(([5,6],[7,8])) print(AB) print(A*B) print(AB) print(np.dot(A,B))题目 4 随机数组生成与条件替换需求生成(3,4)随机整数数组数值范围[0,10)求每列最大值、每行最小值将数组内所有奇数替换为-1rand_arr np.random.randint(0,10,(3,4)) print(rand_arr) # arr[a, b]逗号分隔a控制行b控制列 print(rand_arr[:,:]) # axis0按列运算 print(rand_arr.max(axis0, keepdimsTrue)) # axis1按行运算 print(rand_arr.min(axis1, keepdimsTrue)) 将数组中的所有奇数替换为 -1 print(np.where(rand_arr % 2 ! 0 , -1, rand_arr)) print(np.select([rand_arr % 2 ! 0] , [-1], rand_arr)) 累计奇数数量 print(np.where(rand_arr % 2 ! 0 , -1, 0)) print(np.select([rand_arr % 2 ! 0] , [-1], 0)) print(奇数数量,np.count_nonzero(np.where(rand_arr % 2 ! 0 , -1, 0))) print(奇数数量,np.count_nonzero(np.select([rand_arr % 2 ! 0] , [-1], 0)))题目 5 数组维度变形与聚合计算需求创建 1~12 一维数组重塑为(3,4)二维数组计算每行总和、每列平均值将二维数组展平回一维arr np.random.randint(1,12,(3,4)) print(arr) # axis0按列运算 print(每列的平均值,np.mean(arr,axis0, keepdimsTrue)) # axis1按行运算 print(每行的和, np.sum(arr,axis1, keepdimsTrue)) print(np.reshape(arr,(12))) print(np.reshape(arr,(1,12))) print(arr.reshape((1,12)))题目 6 条件筛选批量修改元素需求生成5*5随机数组范围[0,20)找出大于 10 的元素把所有10 的数值统一替换为 0arr np.random.randint(0,20,(5,5)) print(arr) # greater 大于 greater_equal大于或等于 less 小于 less_equal小于或等于 # np.greater 返回布尔数组用 astype(int) 就能 True→1False→0 print(np.less_equal(arr,10).astype(int)) print(arr[arr10]) print(np.where(arr 10,0,arr)) print(np.select([arr 10], [0],arr))题目 7 销售数据统计实战需求店铺 6 个月销售额[120,135,110,125,130,140]计算总和、均值、方差找出销售额最高、最低对应的月份sales np.array([120,135,110,125,130,140]) print(sales) print(总和, sales.sum()) print(f总和{np.sum(sales)}) print(均值, np.mean(sales)) print(方差, np.var(sales)) 返回最大 / 最小值的索引位置 print(最高的月份,np.argmax(sales)1) print(最低的月份,np.argmin(sales)1)题目 8 数组拼接水平 垂直给定A[1,2,3]B[4,5,6]水平拼接横向合并一维长数组垂直拼接纵向堆叠成两行二维数组a np.array([1,2,3]) b np.array([4,5,6]) c np.concatenate((a,b)) print(c) # 专门水平堆叠等价一维直接拼接 print(np.hstack([a,b])) print(np.reshape(c,(2,3))) 专门垂直堆叠一维数组会升级为二维多行结构 print(np.vstack([a,b]))题目 9 数组去重 频次统计需求数组arr [2, 1, 2, 3, 1, 4, 3]提取唯一值并自动排序统计每个元素出现次数arr np.array([2, 1, 2, 3, 1, 4, 3]) u_arr,counts np.unique(arr,return_countsTrue) print(u_arr) print(counts)题目 10 业务综合利润计算需求5 天业务数据 销售额[20, 25, 22, 30, 28]成本[15, 18, 16, 22, 20]每日利润 销售额 - 成本计算利润均值、标准差定位利润最高的天数sales np.array([20, 25, 22, 30, 28]) cost np.array([15, 18, 16, 22, 20]) profit sales - arr print(利润:,profit) print(利润的平均值,np.mean(profit)) print(利润的标准差,np.std(profit)) print(利润最高的天数,np.argmax(profit)1)学习小总结✨统计函数mean均值 /max最大值 /min最小值 /std标准差 /var方差 /sum求和 /median中位数维度控制axis0列方向操作axis1行方向操作reshape重塑形状flatten/ravel展平数组条件操作三件套布尔索引筛选、np.where条件赋值、np.select多条件判断拼接与去重concatenate通用拼接、hstack水平拼、vstack垂直拼np.unique一键去重计数适合 Python 数据分析新手收藏跟着逐题实操就能搞定 Numpy 最核心常用 API