numpy/pytorch 高级索引(花式索引(index索引&数组索引&tuple索引) & 布尔索引)

        Python高级索引是一个很trick的操作,用的好可以提高效率,但是如果不了解也经常容易看不懂别人代码写的什么意思........

        高级索引大致可分为整数数组索引、布尔索引及花式索引三类

花式索引(整数数组索引 / index索引 / tuple索引)

      花式索引(Fancy indexing)是指利用整数数组进行索引,这里的整数数组可以是numpy数组也可以是Python中列表、元组等可迭代类型。

      整数数组索引指使用同形状的多个数组分别指定元素的所有维度(不指定的维度也可以用切片:或省略号...与索引数组组合),可精准取出一批指定位置的元素,按照给定数组形状返回。

例1:

取出x中(0,0),(1,1)和(2,0)位置处的元素。

numpy/pytorch 高级索引(花式索引(index索引&数组索引&tuple索引) & 布尔索引)_第1张图片

传入的位置指定数组也可为多维

例2

取出x[[(0,0),(0,2)],[3,0, 3,2]]的元素,这样的话会组成一个shape是[2,2]的数组

numpy/pytorch 高级索引(花式索引(index索引&数组索引&tuple索引) & 布尔索引)_第2张图片

传入的索引是什么形式,是几维的,输出值就是什么形式

numpy/pytorch 高级索引(花式索引(index索引&数组索引&tuple索引) & 布尔索引)_第3张图片

索引的“广播”

结果的size是和索引的size相match的,而不是供索引的值的size

numpy/pytorch 高级索引(花式索引(index索引&数组索引&tuple索引) & 布尔索引)_第4张图片

布尔索引

我们可以通过一个布尔数组来索引目标数组

numpy/pytorch 高级索引(花式索引(index索引&数组索引&tuple索引) & 布尔索引)_第5张图片

像这里就是idx1的shape为[3]的,就是对应着x的第一维,这样就是x[0]拿掉,x[1],x[2]保留,所以x[idx1]的shape就变成(2,2,4)了 

idx1的shape也必须为3,不然会报错

如果idx是两维的,它就必须和x的前两维对上,即必须是(3,2)的

numpy/pytorch 高级索引(花式索引(index索引&数组索引&tuple索引) & 布尔索引)_第6张图片

x[idx2]的第一个4是idx2中True的个数,第二个4是第三维的个数,因为idx2只有前两维,所以第三维没动

如果idx是三维的,它就必须和x的shape全对上,即必须是(3,2,4)的

numpy/pytorch 高级索引(花式索引(index索引&数组索引&tuple索引) & 布尔索引)_第7张图片

x[idx3]的shape只有1维了,即idx3中True的个数是14个

 

布尔索引也通过布尔运算(如:比较运算符)来获取符合指定条件的元素的数组

取出大于5的元素

numpy/pytorch 高级索引(花式索引(index索引&数组索引&tuple索引) & 布尔索引)_第8张图片

 过滤掉为nan的值

 numpy/pytorch 高级索引(花式索引(index索引&数组索引&tuple索引) & 布尔索引)_第9张图片

 过滤掉复数元素

numpy/pytorch 高级索引(花式索引(index索引&数组索引&tuple索引) & 布尔索引)_第10张图片

通过布尔值取某几行

numpy/pytorch 高级索引(花式索引(index索引&数组索引&tuple索引) & 布尔索引)_第11张图片

你可能感兴趣的:(numpy,Python)