numpy 数组索引

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([ 2 3 4 ])
>>> x[: - 7 ]
array([ 0 1 2 ])
>>> x[ 1 : 7 : 2 ]
array([ 1 3 5 ])
>>> y  =  np.arange( 35 ).reshape( 5 , 7 )
>>> y[ 1 : 5 : 2 ,:: 3 ]
array([[  7 10 13 ],
        [ 21 24 27 ]])

 

二、使用数组索引数组

例:产生一个一组数组,使用数组来索引出需要的元素。让数组[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([ 3 3 1 8 ])]
array([ 7 7 9 2 ])

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

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

 

三、索引多维数组

 例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([  0 15 30 ])

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

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

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

1
2
3
4
>>> y[np.array([ 0 , 2 , 4 ])]
array([[  0 ,   1 ,   2 ,   3 ,   4 ,   5 ,   6 ],
        [ 14 15 16 17 18 19 20 ],
        [ 28 29 30 31 32 33 34 ]])

 

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

例1

1
2
3
4
>>> y  =  np.arange( 35 )
>>> b  =  y> 20
>>> y[b]
array([ 21 22 23 24 25 26 27 28 29 30 31 32 33 34 ])

例2

1
2
3
4
5
>>> b[:, 5 # use a 1-D boolean whose first dim agrees with the first dim of y
array([ False False False ,   True ,   True ], dtype = bool )
>>> y[b[:, 5 ]]
array([[ 21 22 23 24 25 26 27 ],
        [ 28 29 30 31 32 33 34 ]])

例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 ],
         [ 10 11 12 13 14 ]],
        [[ 15 16 17 18 19 ],
         [ 20 21 22 23 24 ],
         [ 25 26 27 28 29 ]]])
>>> b  =  np.array([[ True True False ], [ False True True ]])
>>> x[b]
array([[  0 ,   1 ,   2 ,   3 ,   4 ],
        5 ,   6 ,   7 ,   8 ,   9 ],
        [ 20 21 22 23 24 ],
        [ 25 26 27 28 29 ]])

  

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

例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 ],
        [ 15 16 ],
        [ 29 30 ]])

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

1
2
3
>>> y[b[:, 5 ], 1 : 3 ]
array([[ 22 23 ],
        [ 29 30 ]])

  

六、Structural indexing tools

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

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

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

1
2
3
4
5
6
7
>>> x  =  np.arange( 5 )
>>> x[:,np.newaxis]  +  x[np.newaxis,:]
array([[ 0 1 2 3 4 ],
        [ 1 2 3 4 5 ],
        [ 2 3 4 5 6 ],
        [ 3 4 5 6 7 ],
        [ 4 5 6 7 8 ]])

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

1
2
3
4
5
>>> z  =  np.arange( 81 ).reshape( 3 , 3 , 3 , 3 )
>>> z[ 1 ,..., 2 ]
array([[ 29 32 35 ],
        [ 38 41 44 ],
        [ 47 50 53 ]])

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

1
2
3
4
>>> z[ 1 ,:,:, 2 ]
array([[ 29 32 35 ],
        [ 38 41 44 ],
        [ 47 50 53 ]])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值