NumPy库——广播(broadcasting)

        当我们使用ufunc函数对两个数组进行运算时,ufunc函数会对对应元素进行计算。但是如果两个数组的形状不相同,就会进行广播处理。

        广播(broadcasting):对于两个形状不同的NumPy数组,将其扩充为形状相同的数组,便于后续进行运算。简而言之,就是向两个数组每一维度上的最大值靠齐。

        那么,接下来我们展示一下,当两个数组的形状不同时,是怎样自动触发广播机制的?

运行代码如下:

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

运行结果:

[[ 0  1  2]
 [10 11 12]
 [20 21 22]
 [30 31 32]]
 

        通过上述例子,我们可以明显的发现,两个形状相差很大的数组,也完成了加法运算。所以,我们可以很明显的察觉到,这其中必定是进行了一些微小的数据处理,那么具体是怎么操作的呢?我们通过下面这幅图来进行说明:

        一个4*3的数组和一个1*3的数组,根据广播的定义:向两个数组每一维度上的最大值靠齐。那么这个1*3的数组就要进行扩充,将自己变为4*3的数组便于进行计算。这样一来,就得到了上述代码所呈现的运行结果。

但是到这里,肯定又有很多小伙伴要问了,这两个数组的形状还是有点巧合的,他们在某一方向上的形状是相同的。这好办,我们再举一个两个方向形状都不同的例子不就行了嘛。

import numpy as np

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

运行结果:

Traceback (most recent call last):
  File "F:\study\python\python_study\pythonProject_practice\pretice.py", line 428, in <module>
    print(a + b)
          ~~^~~
ValueError: operands could not be broadcast together with shapes (4,3) (2,) 

        系统报错,那这句话什么意思?

        你的两个数组不兼容!!!

        好了,那么我们根据这段代码就明白了,原来广播的条件就是:

        必须有一个维度,形状是相同的!

        到这里相信大家对于广播也就有了一个清晰的认知啦~


如果您觉得有用,点赞关注不迷路哦~~~

个人主页正在陆续更新python相关知识。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值