Numpy:数组(Ndarray)的索引和切片


数组的索引和切片

从数组中获取元素可以使用切片和索引,ndarray中除了普通索引和切片外还增加了新的索引功能,更方便的实现从ndarray中获取元素,接下来介绍如何从不同维度的数组中获取元素。

普通索引

一维数组索引

语法:数组名[索引值]

   >>> import numpy as np
   >>> a = np.array([2,4,6,8,10])
   array([ 2,  4,  6,  8, 10])
   >>> a[0] # 索引位置为0的元素
   2

二维数组索引

语法:数组名[行的索引值, 列的索引值]

示例:

   >>> a = np.arange(1, 25).reshape(4,6) # 创建二维数组
   >>> a
   array([[ 1,  2,  3,  4,  5,  6],
          [ 7,  8,  9, 10, 11, 12],
          [13, 14, 15, 16, 17, 18],
          [19, 20, 21, 22, 23, 24]])
   >>> a[2,4] # 获取索引为第2行,第4列的元素
   17

三维数组索引

语法:数组名[页的索引值, 行的索引值, 列的索引值]

示例:

   >>> a = np.arange(1, 25).reshape(2,4,3) # 创建三维数组
   >>> a
   array([[[ 1,  2,  3],
           [ 4,  5,  6],
           [ 7,  8,  9],
           [10, 11, 12]],
   
          [[13, 14, 15],
           [16, 17, 18],
           [19, 20, 21],
           [22, 23, 24]]])
   >>> a[1, 2, 0] # 获取索引为第1页,第2行,第0列的元素
   19
   

切片

一维数组切片

语法:数组名[开始值: 结束值: 步长]

  • 步长默认为1
  • 开始值默认为0
  • 结束值为开区间

示例:

   >>> a = np.array([2,4,6,8,10])
   >>> a
   array([ 2,  4,  6,  8, 10])
   >>> a[1:3] # 切取从索引值1开始到索引值为3(不包含3)的元素
   array([4, 6])

二维数组

语法:数组名[ 行的开始值: 行的结束值: 行的步长, 列的开始值: 列的结束值: 列的步长]

示例:

   >>> a = np.arange(1, 25).reshape(4,6)
   >>> a
   array([[ 1,  2,  3,  4,  5,  6],
          [ 7,  8,  9, 10, 11, 12],
          [13, 14, 15, 16, 17, 18],
          [19, 20, 21, 22, 23, 24]])
   >>> a[1:4, 1:3] # 行选取索引从1开始到4结束(不包含4),列选取索引从1开始到3结束(不包含3)
   array([[ 8,  9],
          [14, 15],
          [20, 21]])
   

三维数组

语法:数组名[页的开始值: 页的结束值: 页的步长, 行的开始值: 行的结束值: 行的步长, 列的开始值: 列的结束值: 列的步长]

示例:

   >>> a = a = np.arange(1, 49).reshape(3,4,4)
   >>> a
   array([[[ 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]]])
   >>> a[1:2,2:4,1:3] # 使用逗号间隔页,行,列
   array([[[26, 27],
           [30, 31]]])

通过以上示例可以看出多维数据中使用逗号间隔不同的维度。

高级索引

整数数组索引

一维数组

语法:数组名[[索引1,索引2,…]]

   >>> a = np.array([2,4,6,8,10])
   >>> a
   array([ 2,  4,  6,  8, 10])
   >>> a[[2,3]] # 同时获取多个元素,将索引值放入列表中构成整数数组索引
   array([6, 8])

二维数组

语法:数组名[[行的索引值], [列的索引值]]

   >>> a = np.arange(1, 25).reshape(4,6)
   >>> a
   array([[ 1,  2,  3,  4,  5,  6],
          [ 7,  8,  9, 10, 11, 12],
          [13, 14, 15, 16, 17, 18],
          [19, 20, 21, 22, 23, 24]])
   >>> a[[1,3],[2,2]] # 索引为1行、2列的元素,索引为3行、2列的元素。
   array([ 9, 21])

注意:示例代码中第一个列表[1,3]为行的索引,[2, 2]为列的索引。

三维数组

语法:数组名[[页的索引值], [行的索引值], [列的索引值]]

   >>> a = np.arange(1, 49).reshape(3,4,4)
   >>> a
   array([[[ 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]]])
   >>> a[[0,1],[2,1],[0,3]] # 逗号间隔了页,行,列。第一个列表中为页的索引,第二个列表为行的索引,第三个为列的索引
   array([ 9, 24])  

布尔索引

语法:数组名[条件表达式]

示例:

   >>> a = np.arange(1, 25).reshape(4,6)
   >>> a
   array([[ 1,  2,  3,  4,  5,  6],
          [ 7,  8,  9, 10, 11, 12],
          [13, 14, 15, 16, 17, 18],
          [19, 20, 21, 22, 23, 24]])
   >>> a[a>10] # 布尔索引将满足条件的筛选出来,返回一维数组
   array([11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]) 

猜你喜欢

转载自blog.csdn.net/shield911/article/details/124109381
今日推荐