Numpy—————(五)

本文详细介绍了NumPy库中的ufunc函数,包括其快速计算特性、out参数的使用、广播机制以及numpy.sin()的性能比较。此外,还讲解了广播、ogrid、mgrid和meshgrid等工具在数组操作中的应用。
摘要由CSDN通过智能技术生成

二、ufunc函数

  1. ufunc 函数是对数组的每个元素进行运算的函数。numpy很多内置的ufunc函数使用C语言实现的,计算速度非常快。

  2. 基本上所有的ufunc函数可以指定一个out参数来保存计算结果数组,并返回out数组。同时如果未指定out参数,则创建新的数组来保存计算结果。                                                       如果你指定了out参数,则要求out数组与计算结果兼容。即:数组的尺寸要严格匹配,并且数组的dtype要匹配。

  1. numpy的某些ufunc函数,如numpy.sin(),支持计算单个数值。但是在单个数值的计算速度上,pythonmath.sin()要快得多。两个原因:

    • numpy.sin()为了同时支持数组和单个数值运算,其C语言的内部实现要比math.sin()复杂
    • 单个数值的计算上:numpy.sin()返回的是numpy.float64类型,而math.sin()返回的是python的标准float类型

1.广播

      当使用ufunc函数对两个数组进行计算时,ufunc函数会对这两个数组的对应元素进行计算。这就要求这两个数组的形状相同。如果这两个数组的形状不同,就通过广播broadcasting进行处理:

  • 首先让所有输入数组都向其中维度最高的数组看齐。看齐方式为:在shape属性的左侧插入数字1
  • 然后输出数组的shape属性是输入数组的shape属性的各轴上的最大值
  • 如果输入数组的某个轴的长度为 1,或者与输出数组的各对应轴的长度相同,该数组能正确广播。否则计算出错
  • 当输入数组的某个轴的长度为 1时,沿着此轴运算时都用此轴上的第一组值。

     可以通过numpy.broadcast_arrays() 查看广播之后的数组。

可见,广播后都变成(4,4)数组。

    

    可以通过ndarray.repeat()方法来手动重复某个轴上的值.其用法为ndarray.repeat(repeats, axis=None),其中:

  • repeats为重复次数
  • axis指定被重复的轴,即沿着哪一轴重复。如果未指定,则将数组展平然后重复。返回的也是一个展平的数组

被重复的是该轴的每一组值。

   4、 numpy提供了ogrid对象,用于创建广播运算用的数组。ogrid对象像多维数组一样,使用切片元组作为下标,返回的是一组可以用于广播计算的数组。其切片有两种形式:

  • 开始值:结束值:步长。它指定返回数组的开始值和结束值(不包括)。默认的开始值为 0;默认的步长为 1。与np.arange类似
  • 开始值:结束值:长度 j。当第三个参数为虚数时,表示返回的数组的长度。与np.linspace类似。
  • 有多少个下标,则结果就是多少维的,同时也返回相应数量的数组。每个返回的数组只有某一维度长度大于1,其他维度的长度全部为 1。假设下标元组长度为3,则结果元组中:第一个数组的shape=(3,1,1),第二个数组的shape=(1,3,1),第三个数组的shape=(1,1,3)

  numpy还提供了mgrid对象,它类似于ogrid对象。但是它返回的是广播之后的数组,而不是广播之前的数组。

    numpy提供了meshgrid()函数,其用法为:numpy.meshgrid(x1,x2,...xn)。其中xi是都是一维数组。返回一个元组 (X1,X2,...Xn),是广播之后的数组。假设xi的长度为 li,则返回元组的每个数组的形状都是(ln,ln-1,......l2,l1)。

    

  numpy.ix_()函数可以将N个一维数组转换成可广播的N维数组。其用法为numpy.ix_(x1,x2,x3),返回一个元组。元组元素分别为对应的可广播的N维数组。

  • 返回的是广播前的数组,而不是广播后的数组

  • 每个转换前的一维数组,对应了一个转换后的 N 维数组

  • 总结

          摘自网络,侵删;

    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值