多维数组下标

多维数组的下标是用元组来实现每一个维度的,如果元组的长度比维度大则会出错,如果小,则默认元组后面补 : 表示全部访问;

如果一个下标不是元组,则先转换为元组,在转换过程中,列表和数组的转换有所不同。

一个列表会被转换成各个元素组成的元组,然后进行访问(此时如果不全为整数的话,则不会共享存储区域,因为无法通过改变步长来保持存储结构不变);如: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_广播与下标相关推荐

  1. python np dot函数_python科学计算之Numpy

    Numpy的组成与功能 Numpy(Numeric Python)可以被理解为一个用python实现的科学计算包,包括: 1.强大的N维数组对象Array: 2.成熟的函数库: 3.实用的线性代数.傅 ...

  2. python矩阵sin计算器_Python科学计算工具

    Python科学计算工具-Numpy入门 2017.07.02 20:29:14字数 1,404阅读 2,509 一:前言 学了中国大学mooc的Python数据分析与展示课程感觉挺不错的,记录下来以 ...

  3. python中ndarray除_python科学计算_numpy_ndarray

    ndarray:n-dimensional array object,即多维数组对象,是python自带的array对象的扩展,array对象和list对象的区别是array对象的每一个元素都是数值, ...

  4. python乘法表运算_Python入门教程(三):史上最全的Numpy计算函数总结,建议收藏!...

    点击上方 蓝字 关注我们 Numpy提供了灵活的.静态类型的.可编译的程序接口口来优化数组的计算,也被称作向量操作,因此在Python数据科学界Numpy显得尤为重要.Numpy的向量操作是通过通用函 ...

  5. python数组去重函数_Python科学计算库Numpy之 数组操作

    操作ndarray 的方法 numpy.reshape:这个函数在不改变数据的条件下修改形状 numpy.ndarray.flat:该函数返回数组上的一维迭代器,行为类似 Python 内建的迭代器 ...

  6. 基于python的风险管理方式属于_张家港高校邦_Python科学计算_网课答案

    张家港高校邦_Python科学计算_网课答案3rh4 张家港高校邦_Python科学计算_网课答案 关注公众号{帅搜}即可查询答案 支持:大学网课,智慧树,知到,超星,尔雅,学习通,选修课,公务员,外 ...

  7. python 科学计算设计_Python科学计算——Data Structures

    为什么选择Python作为科学计算语言? 有关于Matlab和Python哪个更适合作为科学计算语言的争论已久,之所以选择Python作为首选的科学计算语言,不仅仅是因为它免费,开源,有很多优秀的库和 ...

  8. Python 网页爬虫 文本处理 科学计算 机器学习 数据挖掘兵器谱

    Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱 2015-04-27 程序猿 程序猿 来自:我爱自然语言处理,www.52nlp. ...

  9. python中符号计算输出数学_Python科学计算与数据处理—符号运算库.doc

    Python 科学计算与数据处理 - 符号运算库 符号运算库目录从示例开始欧拉恒等式球体体积数学表达 式符号数值运算符和函数符号运算表达式转换和简化方程目录微分 方程积分其他函数符号运算库. 它的目标 ...

最新文章

  1. 客制化键盘编程_客制化键盘如何入坑?
  2. ZOJ 3204 Connect them 继续MST
  3. iPad上的Cookie到底有多长?
  4. 什么样的老板不适合找运营?
  5. 理论分析IRLS迭代加权最小二乘法(根据Gorodnitsky and Rao)
  6. Atitit orm优缺点 Hinaernate mybatis 区别。attilax总结
  7. 2019年 Github 上最热门的 Java 开源项目
  8. DynamipsGUI笔记
  9. Lavas 安装和项目构建
  10. udp 消息转发 服务器,UDP消息发送
  11. PowerShell抓取电脑序列号
  12. dhcp服务器怎样自动,dhcp服务器设置教程【图文教程】
  13. 如何利用FME转换空间坐标系
  14. WSJ Merkel Top On Forbes' Most Powerful Women List For 4th Year
  15. Oracle 12c RAC 安装文档
  16. Lua:协程,coroutine.create,coroutine.resume, coroutine.yield
  17. Vue生命周期,mounted,destory,beforedestory,updated,
  18. 手写体数字识别的两种方法
  19. android应用备份,Android备份App及数据
  20. %d,%c,%s,%x各代表什么

热门文章

  1. mysql中和compute同等作用的_MYSQL中Group By的原理和用法
  2. java 获取js变量类型_JavaScript 的数据类型及其检测
  3. ORA-01830:日期格式图片在转换整个输入字符之前结束
  4. Unity shader入门之数据类型
  5. Eclipse之Undefined attribute name 警告解决办法
  6. 额外sql使用什么封装_为什么建立社区值得付出额外的努力
  7. 入门javascript_Espruino入门,Espruino是用于微控制器JavaScript解释器
  8. input 底线_社区建设如何帮助组织的底线
  9. 明了 | 看了这篇文章,多年不能理解的分布式事物,终于看懂了!
  10. 通俗理解滑模变结构(2)