Numpy中的广播机制详解

广播机制是numpy中处理不同形状数组运算的关键特性,它允许不同尺寸的数组进行算术操作。当两个数组的形状不匹配时,numpy会通过在较小子数组前面添加维度来扩展它的形状,以匹配另一个数组。广播遵循特定的规则:1) 所有数组扩展到最长形状,不足部分通过在前面加1;2) 输出形状是输入数组的最大形状;3) 如果对应维度相等或其中一个为1,可以广播;4) 维度为1的数组在运算时使用其第一组值。通过多个实例,本文深入解析了广播的工作原理及其在实际计算中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

广播机制(定义):

         广播(Broadcast)是numpy对不同形状(shape)的数组进行数值计算的方式,对数组的算术运算通常在相应的元素上进行。
    
    如果两个数组a和b形状相同,即满足a.shape==b.shape,那么a*b的结果就是a与b数组对应位相乘。这要求维数相同,且各维度的长度相同

例如(1):

a=np.array([1,2,3,4])
b=np.array([10,20,30,40])
c=a*b
print(c)

但如果两个形状不同的数组呢?它们之间就不能做算术运算了吗?

           为了保持数组形状相同,numpy设计了一种广播机制,这种机制的核心是对形状较小的数组,在横向或纵向上进行一定次数的重复,使其与形状较大的数组拥有相同的维度

例如(2):

a=np.array([[0,0,0],
           [10,10,10],
           [20,20,20],
           [30,30,30]])
b=np.array([0,1,2])
print(a+b)

广播的规则:

1、让所有输入数组都向其中形状最长的数组看齐,形状中不足的部分都通过在前面加1补齐

2、输出数组的形状是输入数组形状的各个维度上的最大值

3、如果输入数组的某个维度和输出数组的对应维度的长度相同或者其长度为1时,这个数组能够用来计算,否则出错(右对齐时:相同或者为1)

4、当输入数组的某个维度的长度为1时,沿着此维度运算时都用此维度上的第一组值

为了更清楚的理解这些规则,来看几个具体的实例

例(3)

M=np.ones((2,3))
print(M)
a=np.arange(3)
print(a)
print(M.shape)
print(a.shape)

可以看到a组的维度最小,所以在其左边补1,变成 M.shape-->(2,3) a.shape--->(1,3)

对于广播规则的另一种简单理解

1、将两个数组的维度大小右对齐,然后比较对应维度上的数值

2、如果数值相等或其中有一个为1或者为空,则能进行广播运算

3、输出的维度大小为取数值大的数值。 否则不能进行数组运算

# 数组a大小为(2,3)
a=np.arange(6).reshape(2,3)
print('a:',a)
#数组b大小为(1,)
b=np.array([5])
print('b:',b)
c=a*b
c

 

#数组大小为(2,1,3)
a=np.arange(6).reshape(2,1,3)
print('a:',a)
#输出大小为(4,1)
b=np.arange(4).reshape(4,1)
print('b:',b)
c=a+b
print(c,c.shape)

 

从这里能够看出:

1、两个数组右对齐以后,对应维度里的数值要么相等,要么为1,要么缺失取最大的值

2、除此之外就会报错。像选的两个数组就不能做运算

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

夏天的学习日记

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

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

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

打赏作者

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

抵扣说明:

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

余额充值