Python 广播

本文深入解析了Python中NumPy库的广播机制,通过实例演示了如何处理不同形状数组间的运算,解释了广播机制如何使一维和二维数组能够进行相加操作,并详细描述了这一过程背后的原理。

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

Python 广播

​ 当两个数组中每个元素都进行相应的运算的时候,需要两个数组的形状相同,如果形状不同,则使用Python的广播机制进行处理.如下面的例子说明广播是如何操作的.

​ 建立一个二维数组,形状是(6,1):

a = np.arange(0, 60, 10).reshape(-1, 1)
a.shape
# (6, 1)
a
'''
array([[ 0],
       [10],
       [20],
       [30],
       [40],
       [50]])
'''

​ 建立一个一维数组b,其形状为(5,):

b = np.arange(0, 5)
b
#array([0, 1, 2, 3, 4])
b.shape
#(5,)

​ 进行如下操作:

c = a + b
c
'''
array([[ 0,  1,  2,  3,  4],
       [10, 11, 12, 13, 14],
       [20, 21, 22, 23, 24],
       [30, 31, 32, 33, 34],
       [40, 41, 42, 43, 44],
       [50, 51, 52, 53, 54]])
'''
c.shape
# (6, 5)

​ 由于a和b的维数不同,首先需要让b的shape属性向a对齐,即将b变为(1,5)

b.shape = 1, 5
b.shape
#(1, 5)
b
#array([[0, 1, 2, 3, 4]])

​ 加法的两个输入数组的属性分别为(6,1)和(1,5),输出数组的各个轴的长度为输入数组各个轴的长度的最大值,则输出数组的属性为(6,5);

​ 首先将b在第0轴上进行复制,a在第1轴上进行复制,如下所示:

b = b.repeat(6, axis=0)
b
'''
array([[0, 1, 2, 3, 4],
       [0, 1, 2, 3, 4],
       [0, 1, 2, 3, 4],
       [0, 1, 2, 3, 4],
       [0, 1, 2, 3, 4],
       [0, 1, 2, 3, 4]])
'''
b.shape
# (6, 5)
a = a.repeat(5, axis=1)
a
'''
array([[ 0,  0,  0,  0,  0],
       [10, 10, 10, 10, 10],
       [20, 20, 20, 20, 20],
       [30, 30, 30, 30, 30],
       [40, 40, 40, 40, 40],
       [50, 50, 50, 50, 50]])
'''
a.shape
# (6, 5)
#上述a和b可以进行相应的运算

注意:numpy内部不会使用repeat进行数据扩展,这样会占用空间,而是使用内部集成的函数进行.

如ogrid和mgrid函数.

ogrid函数创建广播预算用的数组,mgrid返回的是进行广播后的数组.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值