numpy 数组索引

来源:互联网 发布:做生意的软件 编辑:程序博客网 时间:2024/05/17 00:10

numpy 数组索引

一、单个元素索引

一维数组索引

1
2
3
4
5
>>> x = np.arange(10)
>>> x[2]
2
>>> x[-2]
8

二维数组索引

1
2
3
4
5
>>> x.shape = (2,5# now x is 2-dimensional
>>> x[1,3]
8
>>> x[1,-1]
9

数组切片

1
2
3
4
5
6
7
8
9
10
11
>>> x = np.arange(10)
>>> x[2:5]
array([234])
>>> x[:-7]
array([012])
>>> x[1:7:2]
array([135])
>>> y = np.arange(35).reshape(5,7)
>>> y[1:5:2,::3]
array([[ 71013],
       [212427]])

 

二、使用数组索引数组

例:产生一个一组数组,使用数组来索引出需要的元素。让数组[3,3,1,8]取出x中的第3,3,1,8的四个元素组成一个数组view

1
2
3
4
5
>>> x = np.arange(10,1,-1)
>>> x
array([10,  9,  8,  7,  6,  5,  4,  3,  2])
>>> x[np.array([3318])]
array([7792])

当然,类似切片那样,Index也可以使用负数。但是索引值不能越界!

1
2
>>> x[np.array([3,3,-3,8])]
array([7742])

 

三、索引多维数组

 例1:产生一个5X7的数组,选择0,2,4行,0,1,2列的数

1
2
3
>>> y = np.arange(35).reshape(5,7)
>>> y[np.array([0,2,4]), np.array([0,1,2])]
array([ 01530])

例2:选取第0,2,4行,第1列的值

1
2
>>> y[np.array([0,2,4]), 1]
array([ 11529])

例3:选取第0,2,4行的值

1
2
3
4
>>> y[np.array([0,2,4])]
array([[ 0,  1,  2,  3,  4,  5,  6],
       [14151617181920],
       [28293031323334]])

 

四、布尔值或掩码索引数组

例1

1
2
3
4
>>> y = np.arange(35)
>>> b = y>20
>>> y[b]
array([2122232425262728293031323334])

例2

1
2
3
4
5
>>> b[:,5# use a 1-D boolean whose first dim agrees with the first dim of y
array([FalseFalseFalse,  True,  True], dtype=bool)
>>> y[b[:,5]]
array([[21222324252627],
       [28293031323334]])

例3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
>>> x = np.arange(30).reshape(2,3,5)
>>> x
array([[[ 0,  1,  2,  3,  4],
        5,  6,  7,  8,  9],
        [1011121314]],
       [[1516171819],
        [2021222324],
        [2526272829]]])
>>> b = np.array([[TrueTrueFalse], [FalseTrueTrue]])
>>> x[b]
array([[ 0,  1,  2,  3,  4],
       5,  6,  7,  8,  9],
       [2021222324],
       [2526272829]])

  

五、数组与切片的组合索引数组  

例1:产生一个5X7的数组,使用数组来索引第一个轴,使用切换来索引第二个轴

1
2
3
4
5
>>> y = np.arange(35).reshape(5,7)
>>> y[np.array([0,2,4]),1:3]
array([[ 1,  2],
       [1516],
       [2930]])

例2:切片与布尔类型索引

1
2
3
>>> y[b[:,5],1:3]
array([[2223],
       [2930]])

  

六、Structural indexing tools

例1:使用np.newwaxis可以直接扩展维度

1
2
3
4
>>> y.shape
(57)
>>> y[:,np.newaxis,:].shape
(517)

例2:这是利用了扩展维度与广播特性的矩阵相加。用5X1矩阵与1X5矩阵相加。

1
2
3
4
5
6
7
>>> x = np.arange(5)
>>> x[:,np.newaxis] + x[np.newaxis,:]
array([[01234],
       [12345],
       [23456],
       [34567],
       [45678]])

例3:使用 ... 符号来表示其他维度

1
2
3
4
5
>>> z = np.arange(81).reshape(3,3,3,3)
>>> z[1,...,2]
array([[293235],
       [384144],
       [475053]])

这例子也相当于下面的代码实现

1
2
3
4
>>> z[1,:,:,2]
array([[293235],
       [384144],
       [475053]])