Python的广播机制

原理

两个数组的后缘维度相同,或者在其中一方的维度为1。广播在缺失或者长度为1的维度上补充

举例说明

其中一方维度为1:A为(4,5)的三维数组,B为(4,1)的二维数组,两者维度相同,一个维度相同, 其中另外一个维度的其中一方为1,这种情况是可以进行广播的。

#维度相同,当其中一个维度相同,两个为维度其中一个为1时,可以进行广播
import numpy as np
a=np.array([[1,2,3],[4,5,6]])#2*3
print(f'a={a}\n')
b=np.array([[1],[3]])#2*1
print(f'b={b}\n')
c=a+b
print(f'c={c}')
d = a/b
print(f'd={d}')

  a.shape= (2,3),b.shape=(2,1),第一个维度相同,第二个维度其中一个为1,可以广播,b被广播成b1,b1.shape=(2,3),此时相当于 c=a+b1;同理d=a/b相当于a/b1


 后缘维度:A为(3,4,5)的三维数据,B为(4,5)的二维数组。由于A和B的后缘维度都为(4,5),所以可以进行广播机制。
同理:A为(3,4)的二维数组,B为(4,)的1为数组,他们的后缘维度都是4,所以可以进行广播。

#当A和B的后缘维度相同时,启动广播机制
a=np.array([[[1,2],[2,3],[3,4]],[[2,3],[4,5],[7,8]]])#2*3*2
b=np.array([[6,6],[7,7],[8,8]])#3*2
print(a.shape)
print(b.shape)
c=a+b
print(c)
print(c.shape)#相加后,c的结果是(2,3,2)

 

 a.shape=(2, 3, 2),b.shape =  (3, 2),

经常使用的例子

每一行除以每行的均值

import numpy as np
a=np.array([[1,2,3],[4,5,6]])#2*3
print(a/a.mean(axis =1,keepdims=1))

                                        ​​​​​​​        ​​​​​​​        ​​​​​​​        

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​         

         解释:keepdims=1使得保持二维,使得返回的每行均值数组如上所示,此时shape = (2,1),不然就是这个,此时的shape=(2,),此时a.shape=(2,3),满足其中一方维度为1的条件,均值被广播成

每一列除以每一列的均值

import numpy as np
a=np.array([[1,2,3],[4,5,6]])#2*3
a/a.mean(axis =0)

 

 这边没有keepdims=1,因为a.shape=(2,3),a.mean(axis=0).shape=(3,),,满足后缘维度相同的条件

当然也可以keepdims=1,结果相同

import numpy as np
a=np.array([[1,2,3],[4,5,6]])#2*3
a/a.mean(axis =0,keepdims=1)

此时a.shape=(2,3),a.mean(axis =0,keepdims=1).shape=(1,3),满足后缘维度相同的条件

所以建议使用上方两个例子的时候,建议keepdims=1

 

 

 

 

 

参考:

python的广播机制(broadcasting)_python中的broadcasting_ningyuanfeng的博客-优快云博客

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值