布尔型索引
可以通过比较运算符来产生一个布尔型数组。
对同样大小的布尔型数组,可以利用&(和)、|(或)、-(非)进行运算。
data = np.random.randn(7, 4)
print(data)
print(data > 0)
print((data > -1) & (data < 1))
[[ 0.59711287 0.35911118 0.80925994 -1.60744802]
[ 1.4904879 0.1192616 -0.83902824 0.37876663]
[-0.26166516 -0.49346625 0.18346839 0.70833643]
[ 0.32048212 -0.69056052 -0.29403945 -0.14632815]
[-0.08186285 -0.49594495 0.12816477 1.27712333]
[ 0.44620341 -1.57771506 -0.78073316 -0.38668016]
[-0.66192819 -1.30421999 1.00875952 1.0798795 ]]
[[ True True True False]
[ True True False True]
[False False True True]
[ True False False False]
[False False True True]
[ True False False False]
[False False True True]]
[[ True True True False]
[False True True True]
[ True True True True]
[ True True True True]
[ True True True False]
[ True False True True]
[ True False False False]]
利用布尔型索引的功能,可以快速进行筛选。
定义一个名称数组,长度为7,并假设上述data中的每一行与名称数组中的名字一一对应。
names = np.array(['ben', 'tom', 'ben', 'jeremy', 'jeremy', 'tom', 'ben'])
print(names)
print(data[names == 'ben'])
print(data[(names == 'ben') | (names == 'tom')])
print(data[data > 0])
['ben' 'tom' 'ben' 'jeremy' 'jeremy' 'tom' 'ben']
[[ 0.59711287 0.35911118 0.80925994 -1.60744802]
[-0.26166516 -0.49346625 0.18346839 0.70833643]
[-0.66192819 -1.30421999 1.00875952 1.0798795 ]]
[[ 0.59711287 0.35911118 0.80925994 -1.60744802]
[ 1.4904879 0.1192616 -0.83902824 0.37876663]
[-0.26166516 -0.49346625 0.18346839 0.70833643]
[ 0.44620341 -1.57771506 -0.78073316 -0.38668016]
[-0.66192819 -1.30421999 1.00875952 1.0798795 ]]
[0.59711287 0.35911118 0.80925994 1.4904879 0.1192616 0.37876663 0.18346839 0.70833643 0.32048212 0.12816477 1.27712333 0.44620341
1.00875952 1.0798795 ]
花式索引
#对于使用一维整型数组作为索引,如果目标是一维数组,那么索引的结果就是对应位置的元素;如果目标是二维数组,那么就是对应下标的行。
print(names[[4, 3, 2, 1]])
print(names[[-1, -2, -3, -4]])
print(data