1. 广播

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

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

    broadcast

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

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

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

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

    repeat

  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)ogrid
  5. numpy还提供了mgrid对象,它类似于ogrid对象。但是它返回的是广播之后的数组,而不是广播之前的数组:

    mgrid

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

    meshgrid

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

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

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

      ix_