python广播_用Python广播,BroadcastinginPython

定义:

如果两个数组的后缘维度的轴长度相符或其中一方的轴长度为1,则认为它们是广播兼容的。广播会在缺失维度和轴长度为1的维度上进行。

要学习下 numpy 官方文档里关于 广播机制相关的知识

矩阵 A_(m,n) 和矩阵 B_(1,n) 进行四则运算,后缘维度轴长度相符,可以广播,广播沿着轴长度为1的轴进行,即 B_(1,n) 广播成为 B_(m,n)’ ,之后做逐元素四则运算。

矩阵 A_(m,n) 和矩阵 B_(m,1) 进行四则运算,后缘维度轴长度不相符,但其中一方轴长度为1,可以广播,广播沿着轴长度为1的轴进行,即 B_(m,1) 广播成为 B_(m,n)’ ,之后做逐元素四则运算。

矩阵 A_(m,1) 和常数R 进行四则运算,后缘维度轴长度不相符,但其中一方轴长度为1,可以广播,广播沿着缺失维度和轴长度为1的轴进行,缺失维度就是axis=0,轴长度为1的轴是axis=1,即R广播成为 B_(m,1)’ ,之后做逐元素四则运算。

python

import numpy as np

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

arr2 = np.array([1, 2, 3]) #arr2.shape = (3,)

arr_sum = arr1 + arr2

print(arr_sum)

输入结果如下:

[[1 2 3]

[2 3 4]

[3 4 5]

[4 5 6]]

上例中arr1的shape为(4,3),arr2的shape为(3,)。可以说前者是二维的,而后者是一维的。但是它们的后缘维度相等,arr1的第二维长度为3,和arr2的维度相同。arr1和arr2的shape并不一样,但是它们可以执行相加操作,这就是通过广播完成的,在这个例子当中是将arr2沿着0轴进行扩展。

628e62cff36c8f02d7a741a3fdcbdd47.png

同样还有:

7a20daafe1e9d4032655a3fa7679a5c2.png

从上面的图可以看到,(3,4,2)和(4,2)的维度是不相同的,前者为3维,后者为2维。但是它们后缘维度的轴长相同,都为(4,2),所以可以沿着0轴进行广播。

同样,还有一些例子:(4,2,3)和(2,3)是兼容的,(4,2,3)还和(3)是兼容的,后者需要在两个轴上面进行扩展。

数组维度相同,其中有个轴为1

import numpy as np

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

arr2 = np.array([[1],[2],[3],[4]]) #arr2.shape = (4, 1)

arr_sum = arr1 + arr2

print(arr_sum)

输出结果如下:

[[1 1 1]

[3 3 3]

[5 5 5]

[7 7 7]]

arr1的shape为(4,3),arr2的shape为(4,1),它们都是二维的,但是第二个数组在1轴上的长度为1,所以,可以在1轴上面进行广播,如下图所示:

77e86d1d3b73c772de4ed653bbb4542c.png

在这种情况下,两个数组的维度要保证相等,其中有一个轴的长度为1,这样就会沿着长度为1的轴进行扩展。这样的例子还有:(4,6)和(1,6) 。(3,5,6)和(1,5,6)、(3,1,6)、(3,5,1),后面三个分别会沿着0轴,1轴,2轴进行广播。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值