数组的广播机制

一、数组的广播机制

1、用途:

在Numpy中当数组进行运算时,如果两个数组的形状相同,那么两个数组相乘就是两个数组的对应位相乘,这是要求维数相乘,并且各维度的长度相同,但是当运算中两个数组的形状不同使时,numpy将会自动触发广播机制,所以我们要了解numpy的广播机制,才能更好的进行数组的运算

简单来说就是将不能运算的数组变成可运算的,不过需要满足下面的条件

2、条件

  • 数组拥有相同形状。
  • 数组拥有相同的维数,且某一个或多个维度长度为 1 。
  • 数组拥有极少的维度,可以在其前面追加长度为 1 的维度,使上述条件成立

3、广播的规则

  • 规则 1:如果两个数组的维度数不相同,那么小维度数组的形状将会在最左边补 1。
  • 规则 2:如果两个数组的形状在任何一个维度上都不匹配,那么数组的形状会沿着维度 为 1 的维度扩展以匹配另外一个数组的形状。
  • 规则 3:如果两个数组的形状在任何一个维度上都不匹配并且没有任何一个维度等于 1, 那么会引发异常。

4、

  • 让所有的输入数组首先向其中位数最多的数组看起,shape属性中的不足部分通过在前面 加1补齐
  • 输出数组的shape属性是输入数组的shape属性在各个轴的最大值
  • 如果两个数组的后缘维度(trailing dimension,即从末尾开始算起的维度)的轴长度相符,或其中的一方的长度为1,则认为它们是广播兼容的
  • 当输入数组的某个维度的长度为 1 时,沿着此维度运算时都用此维度上的第一组值。
  • 如果两个数组的输入维数相同,后缘维度相同,但是前面的元素个数不同,无法运算,比如a.shape=[2,2] b.shape = [3,2],则无法进行广播

5、实例

import numpy as np

# 创建一个二维数组
arr1 = np.arange(4).reshape((2, 2))
print("arr1:\n", arr1)
print("arr1 的形状:\n", arr1.shape)  # (2,2)

arr2 = np.array([1, 2])
arr3 = np.array([[1, 2], [1, 2], [1, 2]])
print("arr2:\n", arr2)
print("arr2 的形状:\n", arr2.shape)  # (2,)--->(1,2) # (3,2)

print("arr1 + arr2 :\n", arr1 + arr3)

# 问题  数组1 shape =(2,3,4,5,6,7,8)
# 数组2 shape = (1,7,8)  数组1和数组2 可以算术计算

# 数组3  shape=(7,8,9,4,2)
# 数组4 shape = (7,2,1,4,2) 数组3 和数组4不能进行算术计算

猜你喜欢

转载自blog.csdn.net/qq_40576301/article/details/101389306