numpy——高级索引

Posted a-runner

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了numpy——高级索引相关的知识,希望对你有一定的参考价值。

numpy高级索引:

  NumPy 比一般的 Python 序列提供更多的索引方式。除了之前看到的用整数和切片的索引外,数组可以由整数数组索引、布尔索引及花式索引

1 整数索引

  除了支持python中list那样索引之外,还支持以下实例获取数组中(0,0),(1,1)和(2,0)位置处的元素

  

import numpy as np 
 
x = np.array([[1,  2],  [3,  4],  [5,  6]]) 
y = x[[0,1,2],  [0,1,0]]  # 指获取索引(0,0),(1,1),(2,0)
print (y)


# [1  4  5]

  同时 切片操作支持多维数组:

import numpy as np



x = np.arange(100).reshape(4,25)
print(x)
print(------------------------------)
print(x[0:10:2])

  结果:

[[ 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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
  49]
 [50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
  74]
 [75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
  99]]
------------------------------
[[ 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]
 [50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
  74]]

2  布尔索引

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

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

import numpy as np



x = np.array([[  0,  1,  2],[  3,  4,  5],[  6,  7,  8],[  9,  10,  11]])  
print(x>3)
print(x[x>3])
print(np.where(x>3))

  结果:

  

[[False False False]
 [False  True  True]
 [ True  True  True]
 [ True  True  True]]
[ 4  5  6  7  8  9 10 11]
(array([1, 1, 2, 2, 2, 3, 3, 3], dtype=int64), array([1, 2, 0, 1, 2, 0, 1, 2], dtype=int64))
import numpy as np 
 
a = np.array([1,  2+6j,  5,  3.5+5j])  
print (a[np.iscomplex(a)])

  结果:

   

[2.0+6.j  3.5+5.j]

 

3  花式索引

  花式索引根据索引数组的值作为目标数组的某个轴的下标来取值

  传入多个索引数组(要使用np.ix_)

import numpy as np 
 
x=np.arange(32).reshape((8,4))
print (x[np.ix_([1,5,7,2],[0,3,1,2])])
[[ 4  7  5  6]
 [20 23 21 22]
 [28 31 29 30]
 [ 8 11  9 10]]

 

以上是关于numpy——高级索引的主要内容,如果未能解决你的问题,请参考以下文章

numpy数组的动态高级索引

numpy广播机制,取特定行特定列的元素 的高级索引取法

张量流中张量对象的非连续索引切片(高级索引,如numpy)

乐哥学AI_Python:Numpy索引,切片,常用函数

numpy高级函数:where与extract

python numpy