NumPy百题精解:从入门到精通的100个练习

NumPy百题精解:从入门到精通的100个练习

numpy-100 100 numpy exercises (with solutions) numpy-100 项目地址: https://gitcode.com/gh_mirrors/nu/numpy-100

NumPy作为Python科学计算的核心库,掌握其使用技巧对于数据分析、机器学习等领域至关重要。本文将深入解析100个NumPy经典练习,帮助读者系统性地掌握NumPy的核心功能。

基础操作篇

数组创建与初始化

  1. 创建全零数组:使用np.zeros()可以快速创建指定形状的全零数组,这在初始化权重矩阵等场景非常实用。

    Z = np.zeros(10)  # 创建长度为10的全零向量
    
  2. 特殊值填充:通过索引操作可以灵活修改数组元素,例如将第5个元素设为1:

    Z[4] = 1  # 注意Python索引从0开始
    
  3. 序列生成np.arange()类似于Python的range函数,但功能更强大:

    Z = np.arange(10,50)  # 生成10到49的连续整数
    

数组操作技巧

  1. 数组反转:利用切片操作可以轻松实现数组反转:

    Z = Z[::-1]  # 步长为-1表示反向遍历
    
  2. 矩阵重塑reshape()方法可以改变数组维度而不改变数据:

    Z = np.arange(9).reshape(3,3)  # 创建3x3矩阵
    
  3. 非零元素索引np.nonzero()返回数组中非零元素的索引,在稀疏矩阵处理中很有用:

    nz = np.nonzero([1,2,0,0,4,0])
    

进阶应用篇

数学运算

  1. 矩阵运算:NumPy提供了丰富的线性代数运算函数,如矩阵乘法:

    Z = np.dot(np.ones((5,3)), np.ones((3,2)))  # 5x3矩阵乘以3x2矩阵
    
  2. 条件运算:通过布尔索引可以实现条件筛选:

    Z[(3 < Z) & (Z < 8)] *= -1  # 将3到8之间的元素取反
    
  3. 归一化处理:标准化是数据预处理的常见操作:

    Z = (Z - np.mean(Z)) / np.std(Z)  # 标准化处理
    

特殊矩阵创建

  1. 对角矩阵np.diag()可以创建对角矩阵,k参数控制对角线位置:

    Z = np.diag(1+np.arange(4),k=-1)  # 主对角线下方创建对角矩阵
    
  2. 棋盘矩阵:利用切片和赋值操作可以创建棋盘模式:

    Z[1::2,::2] = 1  # 奇数行偶数列设为1
    Z[::2,1::2] = 1  # 偶数行奇数列设为1
    
  3. 结构化数组:NumPy支持复杂的数据结构:

    dtype = [("position", [("x", float), ("y", float)]), 
             ("color", [("r", float), ("g", float), ("b", float)])]
    

性能优化篇

高效计算技巧

  1. 快速求和:对于小数组,np.add.reduce()np.sum()更快:

    np.add.reduce(Z)  # 替代np.sum(Z)
    
  2. 原地操作:使用out参数可以避免创建临时数组:

    np.add(A,B,out=B)  # 结果直接存入B
    
  3. 广播机制:理解广播规则可以大幅简化代码:

    A * B[:,:,None]  # 5x5x3数组乘以5x5数组
    

内存优化

  1. 内存查看:了解数组内存占用有助于优化:

    print(Z.size * Z.itemsize)  # 计算数组内存占用
    
  2. 类型转换:合理选择数据类型可以节省内存:

    Z = Z.view(np.int32)  # 改变数组视图类型
    
  3. 只读数组:设置flags.writeable可以保护数据:

    Z.flags.writeable = False  # 使数组不可修改
    

实际应用篇

日期处理

  1. 日期计算:NumPy提供了强大的日期时间处理功能:

    yesterday = np.datetime64('today') - np.timedelta64(1)
    
  2. 日期序列:可以生成连续的日期序列:

    Z = np.arange('2016-07', '2016-08', dtype='datetime64[D]')
    

图像处理

  1. 颜色统计:统计图像中的唯一颜色数:

    colors = np.unique(I.reshape(-1, 3), axis=0)
    
  2. 距离计算:计算点集间的距离矩阵:

    D = np.sqrt( (X-X.T)**2 + (Y-Y.T)**2)
    

随机数处理

  1. 随机替换:在数组中随机放置元素:

    np.put(Z, np.random.choice(range(n*n), p, replace=False),1)
    
  2. 极值处理:找到并处理数组中的极值:

    Z[Z.argmax()] = 0  # 将最大值替换为0
    

通过这100个练习,读者可以全面掌握NumPy的核心功能,从基础操作到高级应用,为后续的数据分析和科学计算打下坚实基础。建议读者实际运行每个示例代码,并尝试修改参数观察结果变化,以加深理解。

numpy-100 100 numpy exercises (with solutions) numpy-100 项目地址: https://gitcode.com/gh_mirrors/nu/numpy-100

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梅品万Rebecca

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值