Numpy的广播机制

NumPy 广播(Broadcast):
广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式, 对数组的算术运算通常在相应的元素上进行

维度数与维度的大小

若np.ones((1,2,3)),则维度数为3,第1个维度的大小为1,第二个维度的大小为2,第三个维度的大小为3

一丶维数数量相同

如果两个数组 a 和 b 形状相同,即满足 a.shape == b.shape,那么 a*b 的结果就是 a 与 b 数组 对应位相乘这要求维数相同,且从后往前看各维度的大小相同
特例:若维数相同,对应位置的维数大小不同,但对应维数的大小为1,则可计算.如:np.ones((2,2,3))和np.ones((1,2,1))可计算,再如:np.ones((10,1))和np.ones((1,10)),但np.ones((2,2,3))和np.ones((1,2,2))不可计算,即使第一维为1,但第三维不相同.

①维数数量相同,且维数对应位置的大小也相同

import numpy as np 
 
a = np.array([1,2,3,4]) 
b = np.array([10,20,30,40]) 
print(a.shape,'\n',b.shape)
print (a * b )

输出结果:
在这里插入图片描述
②维数数量相同,维数大小不相同,但对应位置维度大小为1:

import numpy as np 
 
a = np.arange(8).reshape(2,2,2)
b = np.arange(2).reshape(1,2,1)
print(a.shape,'\n',b.shape)
print(a + b,(a+b).shape)

输出结果:
在这里插入图片描述

③维数数量相同,但维数大小不相同,且对应位置维度大小不为1:

import numpy as np 
 
a = np.array([[[ 0, 0, 0],
           [10,10,10],
           [20,20,20],
           [30,30,30]]])
b = np.array([[[1,2,3,4,5]],
            [[1,2,3,4,5]],
            [[1,2,3,4,5]],
            [[1,2,3,4,5]]])
print(a.shape,'\n',b.shape)
print(a + b,(a+b).shape)

输出结果:(因第一维大小和第三维大小不相同)
在这里插入图片描述

二丶维数数量不相同

当运算中的 2 个数组的形状不同时,当满足以下条件时,numpy 将自动触发广播机制。

1.如果维度个数不同,但从后往前其中一个维度包含另一个维度大小。如:np.ones((2,2,3))和np.ones((2,3))可进行广播.

import numpy as np

a = np.ones((2,2,3))
b = np.ones((2,3))
print(a,'\n',b)
print(a.shape,'\n',b.shape)
print(a+b,(a+b).shape)

输出结果:
在这里插入图片描述

1.如果维度个数不同,从后往前其中一个维度大小为1,其余维度大小相同,可广播。如:np.ones((2,2,3))和np.ones((2,1))可进行广播.

import numpy as np

a = np.ones((2,2,3))
b = np.ones((2,1))
print(a,'\n',b)
print(a.shape,'\n',b.shape)
print(a+b,(a+b).shape)

输出结果:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值