Python 中原生的数组就支持使用方括号([])进行索引和切片操作,Numpy 自然不会放过这个强大的特性。

 单个元素索引

1-D数组的单元素索引是人们期望的。它的工作原理与其他标准Python序列一样。它是从0开始的,并且接受负索引来从数组的结尾进行索引。

  1. import numpy as np
  2. a = np.arange(10)
  3. a
  4. Out[130]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
  5. a[3]
  6. Out[131]: 3
  7. a[-2]
  8. Out[132]: 8

与Python原生的列表、元组不同的是,Numpy数组支持多维数组的多维索引。

  1. a.shape
  2. Out[133]: (10,)
  3. a.resize(2, 5)
  4. a
  5. Out[135]:
  6. array([[0, 1, 2, 3, 4],
  7. [5, 6, 7, 8, 9]])
  8. a[0, 1]
  9. Out[136]: 1
  10. a[1, 2]
  11. Out[137]: 7
  12. a[1]
  13. Out[138]: array([5, 6, 7, 8, 9])
  14. a[1][2]
  15. Out[139]: 7

  x[1,-1] 的结果等于 x[1][-1],但是第二种情况效率更低,因为第二种方式创建了一个临时数组。

切片支持

可以使用切片和步长来截取不同长度的数组,使用方式与Python原生的对列表和元组的方式相同。

  1. x = np.arange(10)
  2. x[2:5]
  3. Out[140]: array([2, 3, 4])
  4. x[2:5]
  5. Out[141]: array([2, 3, 4])
  6. x[:-2]
  7. Out[142]: array([0, 1, 2, 3, 4, 5, 6, 7])
  8. x[1:7:2]
  9. Out[143]: array([1, 3, 5])
  10. y = np.arange(35).reshape(5,7)
  11. y
  12. Out[144]:
  13. array([[ 0, 1, 2, 3, 4, 5, 6],
  14. [ 7, 8, 9, 10, 11, 12, 13],
  15. [14, 15, 16, 17, 18, 19, 20],
  16. [21, 22, 23, 24, 25, 26, 27],
  17. [28, 29, 30, 31, 32, 33, 34]])
  18. y[1:5:2,:3]
  19. Out[145]:
  20. array([[ 7, 8, 9],
  21. [21, 22, 23]])
  22. y[1:5:2,::3]
  23. Out[146]:
  24. array([[ 7, 10, 13],
  25. [21, 24, 27]])

  注意:使用切片不会复制内部数组数据,但也会生成原始数据的新视图。

索引数组

Numpy数组可以被其他数组索引。对于索引数组的所有情况,返回的是原始数据的副本,而不是一个获取切片的视图。

索引数组必须是整数类型。

  1. x = np.arange(10,1,-1)
  2. x
  3. Out[147]: array([10, 9, 8, 7, 6, 5, 4, 3, 2])
  4. x[np.array([1,3,4,])]
  5. Out[148]: array([9, 7, 6])

 使用索引数组来对被索引数组进行索引后,会生成一个与索引数组形状相同的新数组,只是这个新数组的值会用被索引数组中对应索引的值替代。

  1. x[np.array([3, 3, 1, 8])]

 布尔索引数组

使用(整数)索引列表时,需要提供要选择的索引列表,最后生成的结果形状与索引数组形状相同;但是在使用布尔索引时,布尔数组必须与要编制索引的数组的初始维度具有相同的形状。在最直接的情况下,布尔数组具有相同的形状:

  1. y
  2. Out[149]:
  3. array([[ 0, 1, 2, 3, 4, 5, 6],
  4. [ 7, 8, 9, 10, 11, 12, 13],
  5. [14, 15, 16, 17, 18, 19, 20],
  6. [21, 22, 23, 24, 25, 26, 27],
  7. [28, 29, 30, 31, 32, 33, 34]])
  8. b = y>20
  9. b
  10. Out[150]:
  11. array([[False, False, False, False, False, False, False],
  12. [False, False, False, False, False, False, False],
  13. [False, False, False, False, False, False, False],
  14. [ True, True, True, True, True, True, True],
  15. [ True, True, True, True, True, True, True]])
  16. y[b]
  17. Out[151]: array([21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34])
  18. y[y>20]
  19. Out[152]: array([21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34])

与整数索引数组的情况不同,在布尔数组中,结果是1-D数组,其包含索引数组中的所有元素,对应于布尔数组中的所有真实元素。索引数组中的元素始终以行优先(C样式)顺序进行迭代和返回。结果也与y[np.nonzero(b)]相同。与索引数组一样,返回的是数据的副本,而不是一个获取切片的视图。

如果y比b的维数更高,则结果将是多维的。例如:

  1. b[:,5]
  2. Out[153]: array([False, False, False, True, True])
  3. y[b[:,5]]
  4. Out[154]:
  5. array([[21, 22, 23, 24, 25, 26, 27],
  6. [28, 29, 30, 31, 32, 33, 34]])

  结构化索引工具

为了便于数组形状与表达式和赋值关系的匹配,可以在数组索引中使用np.newaxis对象来添加大小为1的新维。例如

  1. y.shape
  2. Out[155]: (5, 7)
  3. y[:,np.newaxis,:].shape
  4. Out[157]: (5, 1, 7)

  注意,在数组中没有新的元素,只是维度增加。这可以方便地以一种方式组合两个数组,否则将需要明确重塑操作。例如:

  1. x = np.arange(5)
  2. x
  3. Out[158]: array([0, 1, 2, 3, 4])
  4. x[:,np.newaxis] + x[np.newaxis,:]
  5. Out[159]:
  6. array([[0, 1, 2, 3, 4],
  7. [1, 2, 3, 4, 5],
  8. [2, 3, 4, 5, 6],
  9. [3, 4, 5, 6, 7],
  10. [4, 5, 6, 7, 8]])

  省略语法(三个点)可以用于指示完全选择任何剩余的未指定维度。如果数组z的形状是(3,3,3,3),那么z[1,...,2]等效于z[1,:,:,2]。例如:

  1. z = np.arange(81).reshape(3,3,3,3)
  2. z
  3. Out[160]:
  4. array([[[[ 0, 1, 2],
  5. [ 3, 4, 5],
  6. [ 6, 7, 8]],
  7. [[ 9, 10, 11],
  8. [12, 13, 14],
  9. [15, 16, 17]],
  10. [[18, 19, 20],
  11. [21, 22, 23],
  12. [24, 25, 26]]],
  13. [[[27, 28, 29],
  14. [30, 31, 32],
  15. [33, 34, 35]],
  16. [[36, 37, 38],
  17. [39, 40, 41],
  18. [42, 43, 44]],
  19. [[45, 46, 47],
  20. [48, 49, 50],
  21. [51, 52, 53]]],
  22. [[[54, 55, 56],
  23. [57, 58, 59],
  24. [60, 61, 62]],
  25. [[63, 64, 65],
  26. [66, 67, 68],
  27. [69, 70, 71]],
  28. [[72, 73, 74],
  29. [75, 76, 77],
  30. [78, 79, 80]]]])
  31. z[1,...,2]
  32. Out[161]:
  33. array([[29, 32, 35],
  34. [38, 41, 44],
  35. [47, 50, 53]])
  36. z[1,:,:,2]
  37. Out[162]:
  38. array([[29, 32, 35],
  39. [38, 41, 44],
  40. [47, 50, 53]])

  给被索引的数组赋值

可以使用单个索引,切片,索引和布尔数组来选择数组的子集来分配。分配给索引数组的值必须是形状一致的(相同的形状或可广播到索引产生的形状)。例如,允许为切片分配常量:

  1. x = np.arange(10)
  2. x[2:7]
  3. Out[163]: array([2, 3, 4, 5, 6])
  4. x[2:7] = np.arange(5)
  5. x
  6. Out[164]: array([0, 1, 0, 1, 2, 3, 4, 7, 8, 9])

  

 

Numpy系列(四)- 索引和切片的更多相关文章

  1. numpy数组的索引和切片

    numpy数组的索引和切片 基本切片操作 >>> import numpy as np >>> arr=np.arange(10) >>> arr ...

  2. 利用Python进行数据分析(5) NumPy基础: ndarray索引和切片

    概念理解 索引即通过一个无符号整数值获取数组里的值. 切片即对数组里某个片段的描述. 一维数组 一维数组的索引 一维数组的索引和Python列表的功能类似: 一维数组的切片 一维数组的切片语法格式为a ...

  3. 3.4Python数据处理篇之Numpy系列(四)---ndarray 数组的运算

    目录 目录 (一)数组与标量的运算 1.说明: 2.实例: (二)元素级的运算(一元函数) 1.说明: 2.实例: (三)数组级的运算(二元函数) 1.说明: 2.实例: 目录 1.数组与标量的运算 ...

  4. NumPy学习(索引和切片,合并,分割,copy与deep copy)

    NumPy学习(索引和切片,合并,分割,copy与deep copy) 目录 索引和切片 合并 分割 copy与deep copy 索引和切片 通过索引和切片可以访问以及修改数组元素的值 一维数组 程 ...

  5. Numpy:索引与切片

    numpy基本的索引和切片 import numpy as np arr = np.array([1,2,3,555,666,888,10]) arr array([ 1, 2, 3, 555, 66 ...

  6. 3.3Python数据处理篇之Numpy系列(三)---数组的索引与切片

    目录 (一)数组的索引与切片 1.说明: 2.实例: (二)多维数组的索引与切片 1.说明: 2.实例: 目录: 1.一维数组的索引与切片 2.多维数组的索引与切片 (一)数组的索引与切片 1.说明: ...

  7. NumPy 学习 第二篇:索引和切片

    数组索引是指使用中括号 [] 来定位数据元素,不仅可以定位到单个元素,也可以定位到多个元素.索引基于0,并接受从数组末尾开始索引的负索引. 举个例子,正向索引从0开始,从数组开始向末尾依次加1递增:负 ...

  8. Numpy数组基本操作(数组索引,数组切片以及数组的形状,数组的拼接与分裂)

    一:数组的属性 每个数组都有它的属性,可分为:ndim(数组的维度),shape(数组每个维度的大小),size(数组的总大小),dtype(数组数据的类型) 二:数组索引 和python列表一样,N ...

  9. numpy之索引和切片

    索引和切片 一维数组 一维数组很简单,基本和列表一致. 它们的区别在于数组切片是原始数组视图(这就意味着,如果做任何修改,原始都会跟着更改). 这也意味着,如果不想更改原始数组,我们需要进行显式的复制 ...

随机推荐

  1. sql server 错误日志errorlog

    一 .概述 SQL Server 将某些系统事件和用户定义事件记录到 SQL Server 错误日志和 Microsoft Windows 应用程序日志中. 这两种日志都会自动给所有记录事件加上时间戳 ...

  2. iOS transform属性的使用

    1.transform属性 在iOS开发中,通过transform属性可以修改UIView对象的平移.缩放比例和旋转角度,常用的创建transform结构体方法分两大类 (1) 创建“基于控件初始位置 ...

  3. python正则表达式相关记录

    1 python中字符串前加‘r’,即可阻止‘\’导致的字符转义.但是在re.sub()中参数中加'r'不会起作用.

  4. HTMLCSS--案例| 超链接美化 | 模态框 | tab栏选项卡

    一.超链接美化 二.模态框 三.tab栏选项卡 -------------------------------------------- 一.超链接美化 <!DOCTYPE html> & ...

  5. django--use

    https://docs.djangoproject.com/zh-hans/2.0/intro/

  6. SQL UNIQUE 约束

    SQL UNIQUE 约束 UNIQUE 约束唯一标识数据库表中的每条记录. UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证. PRIMARY KEY 拥有自动定义的 ...

  7. Mac下使用国内镜像安装Homebrew

    First MBP上的brew很老了,就想把brew更新一下,顺便安装一下NodeJs.无奈更新的过程一直卡在网络下载,毫不动弹.想想,应该是Repo访问不到的原因,于是重装brew. 根据官网上的方 ...

  8. SpringBoot四大神器之Actuator

    介绍 Spring Boot有四大神器,分别是auto-configuration.starters.cli.actuator,本文主要讲actuator.actuator是spring boot提供 ...

  9. 001_JavaScript数组常用方法总结及使用案例

    一. https://msdn.microsoft.com/zh-cn/library/ff679976(v=vs.94).aspx 二.ip地址转换成对应的二进制. const ip='172.16 ...

  10. 解决chrome安装谷歌访问助手错误问题

    解决chrome安装谷歌访问助手错误问题 针对新版本安装谷歌访问助手插件报错问题 1.下载谷歌访问助手 http://www.ggfwzs.com/ 2.chrome浏览器打开发者模式 3.将下载的c ...