Numpy广播域的理解
作者:算力鬼才信 发布时间:2023-03-11 14:37:11
NumPy广播(Broadcast),广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式, 对数组的算术运算通常在相应的元素上进行。
不同形状指的是,大小不同当然不是指的维度,但是要求数组各维度的长度相同
例如:
arr = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
print(arr)
arr2 = np.array([1,2,3])
arr是4*3的二维数组 arr2 是1*3的一维数组 ,二维数组中的一维数组 长度是3 ,而一维数组的长度也是三,所以只有满足这样的条件才可以进行计算。
如果想要知道他们是如何进行计算的请看下面的图片
arr = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
print(arr)
arr2 = np.array([1,2,3])
print(arr2)
print(arr*arr2)
我们知道arr 和arr 数组的维度是不相同的,如果在普通的运算中,如果我们想对它们元素到元素之间进行相乘或者相加减,显然是不可能的,但是在numpy中是可以对不同维度的数组进行乘除加减操作的,因为numpy中的数组具有广播功能。低维度的数组会扩展到和多维数组相同大小
我们可以这样认为,arr2是一维数组,它和二维数组arr 进行乘法运算,arr2 中的每一元素依次会和二维数组的每一个元素相乘。但是对广播来说不能这样简单认为:
arr2
1 | 2 | 3 |
arr2经过广播后
1 | 2 | 3 |
1 | 2 | 3 |
1 | 2 | 3 |
1 | 2 | 3 |
arr数组
0 | 2 | 6 |
3 | 8 | 15 |
6 | 14 | 24 |
9 | 20 | 22 |
广播操作具有延伸性,它会将低维度的数组,延伸成为和高维度一样大小的数组,然后在对他们进行乘除加减操作。
有的朋友会问,二维数组乘以一维数组它们得到的结果是多大维度的。
显然结果是二维数组,如果测试该数组的维度,请将该数组点上一个 ndim 方法名 arr.ndim
NumPy广播的规则
让所有输入数组都向其中形状最长的数组看齐,形状中不足的部分都通过在前面加 1 补齐。
输出数组的形状是输入数组形状的各个维度上的最大值。
刚才看到 输入数组 arr 是 4 x 3 arr2 是 1 x 3 ,输出数组 result 是 4 x 3 最大值是不是 4 x 3 啊
如果输入数组的某个维度和输出数组的对应维度的长度相同或者其长度为 1 时,这个数组能够用来计算,否则出错。
arr 是二维,arr2是一维,我们需要拿arr中的一维数组和arr2比较观察他们的长度(行元素个数)是否相同,或者arr2中只有一个元素,才能进行计算否则会报错
两个输入数组对应维度的元素个数相同:
arr = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
arr2 = np.array([2,3,4])
低维度的元素个数(长度)为 1
arr = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
arr2 = np.array([2])
报错案例: 低维度的数组多一个元素或者少一个元素都不行,但排除元素个数为1的可能性
低维度数组的元素少一个
arr = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
arr2 = np.array([2,3])
报错提示:
ValueError: operands could not be broadcast together with shapes (4,3) (2,)
低维度数组的元素多一个
arr = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
arr2 = np.array([2,3,4,5])
报错提示:ValueError: operands could not be broadcast together with shapes (4,3) (4,)
正确 : 低维度数组维度的值(元素个数)为1个
arr = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
arr2 = np.array([3])
result = arr*arr2
结果:
[[ 1 2 3] arr
[ 4 5 6]
[ 7 8 9]
[10 11 12]]
[3] arr2
[[ 3 6 9] result
[12 15 18]
[21 24 27]
[30 33 36]]
当输入数组的某个维度的长度为 1 时,沿着此维度运算时都用此维度上的第一组值。
简单理解:对两个数组,分别比较他们的每一个维度(若其中一个数组没有当前维度则忽略),满足:
数组拥有相同形状。
当前维度的值相等。
当前维度的值有一个是 1。
numpy中的数组具有广播性,广播性就是延伸性,比较低的维度数组会延伸到和维度较大的数组一样的大小,这里的低维度指的是一维数组,如果是其它维度就要做操作的两个数组的维数相同和各维度的长度是否相同不同则不可以进行广播操作。numpy只针对一维数组且各维度的长度要相同,或者其中一个数组只有一个元素。
来源:https://blog.csdn.net/weixin_59131972/article/details/129707166
猜你喜欢
- 翻译:ShiningRay @ Nirvana Studio作者:Douglas Crockford来源:http://www.crockf
- 我就废话不多说了,大家还是直接看代码吧!#! usr/bin/python3.5# -*- coding:utf-8 -*-a = inpu
- 本文假设你在 GitHub 上已经有一个想要打包和发布的项目。第 0 步:获取项目许可证在做其他事之前,由于你的项目要开源,因此应该有一个许
- 本文实例讲述了Python实现方便使用的级联进度信息的方法。分享给大家供大家参考。具体实现方法如下:class StepedProgress
- 1、余弦相似度余弦相似度衡量的是2个向量间的夹角大小,通过夹角的余弦值表示结果,因此2个向量的余弦相似度为:余弦相似度的取值为[-1,1],
- 创建一个示例数据框:import pandas as pddf = pd.DataFrame([['乔峰', '男&
- 如何通过PHP实现Des加密算法代码实例注:php7以上不支持了,因为php7去掉了某些函数, 另外变量的{}要改为[]<?phpcl
- 一、题目描述本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。小明刚刚找到工作,老板人很好,只是老板夫人很爱购物。老板
- 先推荐一个学习python的好网址简明 Python 教程 Swaroop, C. H. 著 沈洁元 译在线教程的网址
- 孤立帐户,就是某个数据库的帐户只有用户名而没有登录名,这样的用户在用户库的sysusers系统表中存在,而在master数据库的syslog
- 除了使用 sys.exc_info() 方法获取更多的异常信息之外,还可以使用 traceback 模块,该模块可以用来查看异常的传播轨迹,
- join用来连接字符串,split恰好相反,拆分字符串的。不用多解释,看完代码,其意自现了。>>>li = ['m
- 本文实例讲述了Python Tensor FLow简单使用方法。分享给大家供大家参考,具体如下:1、基础概念Tensor表示张量,是一种多维
- CONVERT将某种数据类型的表达式显式转换为另一种数据类型。由于某些需求经常用到取日期格式的不同.现以下可在SQL Server中将日期格
- 下面的代码主要用于使用python语言调用NASA官方的MODIS处理工具HEG进行投影坐标转换与重采样批量处理主要参考HEG的用户手册:h
- 本文实例为大家分享了python实现图像拼接的具体代码,供大家参考,具体内容如下1.待拼接的图像2. 基于SIFT特征点和RANSAC方法得
- 一、匿名块和命名块◆PL/SQL块分为良好总:命名块和匿名块。◆匿名块:以declare或begin开始,每次执行匿名块都要通过客户端工具将
- 这篇文章主要介绍了python已协程方式处理任务实现过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的
- 今天主要是来说一下怎么可视化来监控你的爬虫的状态。相信大家在跑爬虫的过程中,也会好奇自己养的爬虫一分钟可以爬多少页面,多大的数据量,当然查询
- “表情包”是现在非常流行的交流方式,通过一张图片就能把文字不能表达或不便于表达的情感给表示出来,表情包一经诞生,就统治了中国人的社交圈,尤其