(100天2小时第十七天)广播机制

属于广播主要描述于numpy对于不同shape的数组如何进行算术运算。受限于一些特定约束。
一般都是小的数组扩展为大的数组,以便能计算。

1.通常情况下,numpy操作的数组必须是相同shape的。

a = np.array([1.0, 2.0, 3.0])
b = np.array([2.0, 2.0, 2.0])
print(a * b)
[2. 4. 6.]

2.当数组的shape满足某些特定约束时,numpy的广播机制可以使这个约束更宽松。最简单的就是广播例子就是当数组和一个标量操作时。

a = np.array([1.0, 2.0, 3.0])
b = 2.0
print(a * b)
[2. 4. 6.]

上面两个例子的结果是一样的,我们可以认为标量b被扩展为了和a同样shape的数组,b中的新元素就是原来标量的拷贝。这个扩展策略仅仅是概念上的,实际上Numpy足够聪明,能自动使用标量做运算,而不需要复制任何东西。所以广播运算从计算内存上来说更优秀。

要能满足广播,必须符合下面两条规则:

  1. 广播之后,输出数组的shape是输入数组shape的各个轴上的最大值,然后沿着较大shape属性的方向复制延伸;
  2. 要进行广播机制,要么两个数组的shape属性一样,要么其中有一个数组的shape属性必须有一个等于1;
a = np.array([2.0, 2.0, 3.0])
b = np.array([2.0, 2.0])
print(a * b)
Traceback (most recent call last):
  File "C:/Users/Admin/PycharmProjects/untitled2/17.py", line 9, in <module>
    print(a * b)
ValueError: operands could not be broadcast together with shapes (3,) (2,) 

Process finished with exit code 1

a的shape属性是3,b的shape属性是2,报错。要么一样要么有一个为1.
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值