numpy里面的broadcast

本文通过实例详细介绍了NumPy中的广播机制,展示了如何利用该机制实现不同形状数组间的运算,并解释了广播机制的工作原理及使用条件。

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

前言

numpy 很好的支持向量和矩阵的运算,broadcast 它很灵活和智能,有时它会自动帮我们完成一些事情。

先来个直观的认识


import numpy as np
a=np.array([[1,2,3],[4,5,6]])
b=np.array([[1,1,1],[1,1,1]])
print(a+b)

输出:

[[2 3 4]
 [4 5 6]]

a和b都是2x3的矩阵,把他们相加,numpy让各个元素分别相加。这个很正常。
如果 b=[1,2,3]会怎么呢?

import numpy as np
a=np.array([[1,2,3],[4,5,6]])
b=np.array([1,2,3])
print(a)
print(b)
print(a+b)

先跑一波看看:

[[1 2 3]
 [4 5 6]]
[1 2 3]
[[2 4 6]
 [5 7 9]]

结果是一个2x3的矩阵。
奇怪啦,这是怎么做到的呢?a是一个2x3的矩阵,而b是一个1x3的矩阵。讲道理,这个是不能相加的哎╮(╯▽╰)╭。这个结果是什么来的?
我们让c=a+b,输出c-a看看:

import numpy as np
a=np.array([[1,2,3],[4,5,6]])
b=np.array([1,2,3])
c=a+b
print(c-a)

输出:

[[1 2 3]
 [1 2 3]]

interesting ,b原先是一个1x3的矩阵,现在扩展成为:2x3的矩阵。具体的做法是将第一行数据复制到第二行去。
这就是broadcast做的一个处理。

broadcast

当参与运算的两个矩阵的大小不一致的时候怎么办嘞?broadcast 告诉你 怎么办。就像上面的例子显示的那样。
通常 numpy的操作都是两个矩阵的对应位置元素依次操作,比如上面的a+b,就是cij=aij+bij。一般来说两个操作数需要是相同的形状,但是numpy的broadcast机制让这个限制条件稍微宽松一下,但是也依然得满足某些条件。
条件就是:
设A是nxm矩阵,B是pxq矩阵。A,B可参与逐元素的numpy运算当且仅当
1.n=p且m=q 或
2.n=p,m或q为1;或
3.n或p为1,m=q.或
4.n=p=1或m=q=1.

如果这些条件都不满足,则报错。
broadcast的结果max(n,p)xmax(m,q)的矩阵。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值