python下表运算_python科学计算_numpy_广播与下标
多维数组下标
多维数组的下标是用元组来实现每一个维度的,如果元组的长度比维度大则会出错,如果小,则默认元组后面补 : 表示全部访问;
如果一个下标不是元组,则先转换为元组,在转换过程中,列表和数组的转换有所不同。
一个列表会被转换成各个元素组成的元组,然后进行访问(此时如果不全为整数的话,则不会共享存储区域,因为无法通过改变步长来保持存储结构不变);如:lidx=[[0],[1],[2]];如果用lidx来访问一个数组,则会被转换成:([0],[1],[2]),即访问(0,1,2)上的元素;
一个数组会进行补 : 操作转成长度一致的元组,如三维数组a:
array([[[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19]],
[[20, 21, 22, 23, 24],
[25, 26, 27, 28, 29],
[30, 31, 32, 33, 34],
[35, 36, 37, 38, 39]],
[[40, 41, 42, 43, 44],
[45, 46, 47, 48, 49],
[50, 51, 52, 53, 54],
[55, 56, 57, 58, 59]]])
如果使用一个数组来访问:aidx=np.array([[0],[1],[2]]):
array([[0],
[1],
[2]])
则会被补全为:(aidx,:,:),访问结果为:
array([[[[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19]]],
[[[20, 21, 22, 23, 24],
[25, 26, 27, 28, 29],
[30, 31, 32, 33, 34],
[35, 36, 37, 38, 39]]],
[[[40, 41, 42, 43, 44],
[45, 46, 47, 48, 49],
[50, 51, 52, 53, 54],
[55, 56, 57, 58, 59]]]])
结果的形状是访问下标数组的形状和原数组形状的组合:原数组形状为(3,4,5),下标数组形状为:(3,1);访问得到的数组形状为:(3,1,4,5);访问数组在0轴位置替代原数组形状;
相当于a(aidx,:,:),如果访问:a(:,aidx,:),则访问的形状应该为(3,3,1,5),即在1轴位置替代原数组形状;
广播
再复习一下广播,详细规则见随笔:http://www.cnblogs.com/lyon2014/p/4696989.html
如上例的a数组,a.shape = (3,4,5),如果使用数组来访问,则会在对应的位置替代原数组的形状,如果下标中有多个数组,且形状不一致,则会进行广播,如:
i0 = np.array([[1,2,1],[0,1,0]]) , i0.shape=(2,3)
i1 = np.array([[[0]],[[1]]]), i1.shape=(2,1,1)
i2 = np.array([[[2,3,2]]]), i2.shape=(1,1,3)
按照广播的规则,i0的维数比最大维数3少,进行补1操作得到新的形状为:(1,2,3),再比较各个轴的长度:
1 2 3
2 1 1
1 1 3
--------
2 2 3
最后结果的形状为(2,2,3),且满足第三条规则,可以进行计算;广播后的三个数组(记为:ind0,ind1,ind2)为:
ind0:
array([[[1, 2, 1],
[0, 1, 0]],
[[1, 2, 1],
[0, 1, 0]]])
ind1:
array([[[0, 0, 0],
[0, 0, 0]],
[[1, 1, 1],
[1, 1, 1]]])
ind2:
array([[[2, 3, 2],
[2, 3, 2]],
[[2, 3, 2],
[2, 3, 2]]])
此时,使用广播后的三个数组访问数组a(i0,i1,i2),得到的数组形状应该只与下标数组有关,即广播后的数组形状:(2,2,3);
如果a使用其中的两个数组访问:a(:,i0,i1),由于i0和i1广播后的形状为 (2,2,3),在1、2轴替换a数组的形状,最后得到的形状为:(3,2,2,3);
如果a使用其中两个数组访问,并且两个数组不连续:a(i0,:,i1),则第二轴会作为最后一维,即形状应该为广播后形状加上切片轴的形状:(2,2,3,4)
布尔数组作为下标
布尔数组作为下标时,相当于用nonzero()处理后的元组作为下标;
如:b2 = np.array([[True,False,True],[True,False,False]]) 作为下标,相当于:
np.nonzero(b2) = (array([0, 0, 1]), array([0, 2, 0]))
a[b2] = a[np.nonzero(b2)] = a[ array([0, 0, 1]), array([0, 2, 0]), : ], 前两轴由于作为元组访问,最后得到的形状为(3,),最后访问到的形状为:(3,5)
python下表运算_python科学计算_numpy_广播与下标相关推荐
- python np dot函数_python科学计算之Numpy
Numpy的组成与功能 Numpy(Numeric Python)可以被理解为一个用python实现的科学计算包,包括: 1.强大的N维数组对象Array: 2.成熟的函数库: 3.实用的线性代数.傅 ...
- python矩阵sin计算器_Python科学计算工具
Python科学计算工具-Numpy入门 2017.07.02 20:29:14字数 1,404阅读 2,509 一:前言 学了中国大学mooc的Python数据分析与展示课程感觉挺不错的,记录下来以 ...
- python中ndarray除_python科学计算_numpy_ndarray
ndarray:n-dimensional array object,即多维数组对象,是python自带的array对象的扩展,array对象和list对象的区别是array对象的每一个元素都是数值, ...
- python乘法表运算_Python入门教程(三):史上最全的Numpy计算函数总结,建议收藏!...
点击上方 蓝字 关注我们 Numpy提供了灵活的.静态类型的.可编译的程序接口口来优化数组的计算,也被称作向量操作,因此在Python数据科学界Numpy显得尤为重要.Numpy的向量操作是通过通用函 ...
- python数组去重函数_Python科学计算库Numpy之 数组操作
操作ndarray 的方法 numpy.reshape:这个函数在不改变数据的条件下修改形状 numpy.ndarray.flat:该函数返回数组上的一维迭代器,行为类似 Python 内建的迭代器 ...
- 基于python的风险管理方式属于_张家港高校邦_Python科学计算_网课答案
张家港高校邦_Python科学计算_网课答案3rh4 张家港高校邦_Python科学计算_网课答案 关注公众号{帅搜}即可查询答案 支持:大学网课,智慧树,知到,超星,尔雅,学习通,选修课,公务员,外 ...
- python 科学计算设计_Python科学计算——Data Structures
为什么选择Python作为科学计算语言? 有关于Matlab和Python哪个更适合作为科学计算语言的争论已久,之所以选择Python作为首选的科学计算语言,不仅仅是因为它免费,开源,有很多优秀的库和 ...
- Python 网页爬虫 文本处理 科学计算 机器学习 数据挖掘兵器谱
Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱 2015-04-27 程序猿 程序猿 来自:我爱自然语言处理,www.52nlp. ...
- python中符号计算输出数学_Python科学计算与数据处理—符号运算库.doc
Python 科学计算与数据处理 - 符号运算库 符号运算库目录从示例开始欧拉恒等式球体体积数学表达 式符号数值运算符和函数符号运算表达式转换和简化方程目录微分 方程积分其他函数符号运算库. 它的目标 ...
最新文章
- 客制化键盘编程_客制化键盘如何入坑?
- ZOJ 3204 Connect them 继续MST
- iPad上的Cookie到底有多长?
- 什么样的老板不适合找运营?
- 理论分析IRLS迭代加权最小二乘法(根据Gorodnitsky and Rao)
- Atitit orm优缺点 Hinaernate mybatis 区别。attilax总结
- 2019年 Github 上最热门的 Java 开源项目
- DynamipsGUI笔记
- Lavas 安装和项目构建
- udp 消息转发 服务器,UDP消息发送
- PowerShell抓取电脑序列号
- dhcp服务器怎样自动,dhcp服务器设置教程【图文教程】
- 如何利用FME转换空间坐标系
- WSJ Merkel Top On Forbes' Most Powerful Women List For 4th Year
- Oracle 12c RAC 安装文档
- Lua:协程,coroutine.create,coroutine.resume, coroutine.yield
- Vue生命周期,mounted,destory,beforedestory,updated,
- 手写体数字识别的两种方法
- android应用备份,Android备份App及数据
- %d,%c,%s,%x各代表什么
热门文章
- mysql中和compute同等作用的_MYSQL中Group By的原理和用法
- java 获取js变量类型_JavaScript 的数据类型及其检测
- ORA-01830:日期格式图片在转换整个输入字符之前结束
- Unity shader入门之数据类型
- Eclipse之Undefined attribute name 警告解决办法
- 额外sql使用什么封装_为什么建立社区值得付出额外的努力
- 入门javascript_Espruino入门,Espruino是用于微控制器JavaScript解释器
- input 底线_社区建设如何帮助组织的底线
- 明了 | 看了这篇文章,多年不能理解的分布式事物,终于看懂了!
- 通俗理解滑模变结构(2)