NumPy百题精解:从入门到精通的100个练习
numpy-100 100 numpy exercises (with solutions) 项目地址: https://gitcode.com/gh_mirrors/nu/numpy-100
NumPy作为Python科学计算的核心库,掌握其使用技巧对于数据分析、机器学习等领域至关重要。本文将深入解析100个NumPy经典练习,帮助读者系统性地掌握NumPy的核心功能。
基础操作篇
数组创建与初始化
-
创建全零数组:使用
np.zeros()
可以快速创建指定形状的全零数组,这在初始化权重矩阵等场景非常实用。Z = np.zeros(10) # 创建长度为10的全零向量
-
特殊值填充:通过索引操作可以灵活修改数组元素,例如将第5个元素设为1:
Z[4] = 1 # 注意Python索引从0开始
-
序列生成:
np.arange()
类似于Python的range函数,但功能更强大:Z = np.arange(10,50) # 生成10到49的连续整数
数组操作技巧
-
数组反转:利用切片操作可以轻松实现数组反转:
Z = Z[::-1] # 步长为-1表示反向遍历
-
矩阵重塑:
reshape()
方法可以改变数组维度而不改变数据:Z = np.arange(9).reshape(3,3) # 创建3x3矩阵
-
非零元素索引:
np.nonzero()
返回数组中非零元素的索引,在稀疏矩阵处理中很有用:nz = np.nonzero([1,2,0,0,4,0])
进阶应用篇
数学运算
-
矩阵运算:NumPy提供了丰富的线性代数运算函数,如矩阵乘法:
Z = np.dot(np.ones((5,3)), np.ones((3,2))) # 5x3矩阵乘以3x2矩阵
-
条件运算:通过布尔索引可以实现条件筛选:
Z[(3 < Z) & (Z < 8)] *= -1 # 将3到8之间的元素取反
-
归一化处理:标准化是数据预处理的常见操作:
Z = (Z - np.mean(Z)) / np.std(Z) # 标准化处理
特殊矩阵创建
-
对角矩阵:
np.diag()
可以创建对角矩阵,k参数控制对角线位置:Z = np.diag(1+np.arange(4),k=-1) # 主对角线下方创建对角矩阵
-
棋盘矩阵:利用切片和赋值操作可以创建棋盘模式:
Z[1::2,::2] = 1 # 奇数行偶数列设为1 Z[::2,1::2] = 1 # 偶数行奇数列设为1
-
结构化数组:NumPy支持复杂的数据结构:
dtype = [("position", [("x", float), ("y", float)]), ("color", [("r", float), ("g", float), ("b", float)])]
性能优化篇
高效计算技巧
-
快速求和:对于小数组,
np.add.reduce()
比np.sum()
更快:np.add.reduce(Z) # 替代np.sum(Z)
-
原地操作:使用out参数可以避免创建临时数组:
np.add(A,B,out=B) # 结果直接存入B
-
广播机制:理解广播规则可以大幅简化代码:
A * B[:,:,None] # 5x5x3数组乘以5x5数组
内存优化
-
内存查看:了解数组内存占用有助于优化:
print(Z.size * Z.itemsize) # 计算数组内存占用
-
类型转换:合理选择数据类型可以节省内存:
Z = Z.view(np.int32) # 改变数组视图类型
-
只读数组:设置
flags.writeable
可以保护数据:Z.flags.writeable = False # 使数组不可修改
实际应用篇
日期处理
-
日期计算:NumPy提供了强大的日期时间处理功能:
yesterday = np.datetime64('today') - np.timedelta64(1)
-
日期序列:可以生成连续的日期序列:
Z = np.arange('2016-07', '2016-08', dtype='datetime64[D]')
图像处理
-
颜色统计:统计图像中的唯一颜色数:
colors = np.unique(I.reshape(-1, 3), axis=0)
-
距离计算:计算点集间的距离矩阵:
D = np.sqrt( (X-X.T)**2 + (Y-Y.T)**2)
随机数处理
-
随机替换:在数组中随机放置元素:
np.put(Z, np.random.choice(range(n*n), p, replace=False),1)
-
极值处理:找到并处理数组中的极值:
Z[Z.argmax()] = 0 # 将最大值替换为0
通过这100个练习,读者可以全面掌握NumPy的核心功能,从基础操作到高级应用,为后续的数据分析和科学计算打下坚实基础。建议读者实际运行每个示例代码,并尝试修改参数观察结果变化,以加深理解。
numpy-100 100 numpy exercises (with solutions) 项目地址: https://gitcode.com/gh_mirrors/nu/numpy-100
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考