整数数组索引

以下实例获取数组中 (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

a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
b = a[1:3, 1:3]
c = a[1:3, [1, 2]]
d = a[..., 1:]
print(a)
print('\n')
print(b)
print('\n')
print(c)
print('\n')
print(d)

[[1 2 3]
[4 5 6]
[7 8 9]]
[[5 6]
[8 9]]
[[5 6]
[8 9]]
[[2 3]
[5 6]
[8 9]]

布尔索引

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

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

import numpy as np

x = np.array([[ 0, 1, 2],[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, 11]])
print ('我们的数组是:')
print (x)
print ('\n')
# 现在我们会打印出大于 5 的元素
print ('大于 5 的元素是:')
print (x[x > 5])
>>>[6 7 8 9 10 11]

花式索引

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

花式索引跟切片不一样,它总是将数据复制到新数组中。

一维数组(读取下标为0,6的数据):

import numpy as np

x = np.arange(9)
print(x)
# 一维数组读取指定下标对应的元素
print("-------读取下标对应的元素-------")
x2 = x[[0, 6]] # 使用花式索引
print(x2)
print(x2[0])
print(x2[1])
>>>[0 1 2 3 4 5 6 7 8]
>>>-------读取下标对应的元素-------
>>>[0 6]
>>>0
>>>6

二维数组(输出下表为 4, 2, 1, 7 对应的行):

import numpy as np

x=np.arange(32).reshape((8,4))
print(x)
# 二维数组读取指定下标对应的行
print("-------读取下标对应的行-------")
print (x[[4,2,1,7]])
print (x[[-4,-2,-1,-7]])#倒序索引数组

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

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])])
# 笛卡尔积(1,0)(1,3)(1,1)(1,2)(5,0)(5,3)(5,1)(5,2)(7,0)(7,3)(7,1)(7,2)(2,0)(2,3)(2,1)(2,2)