本文研究的主要是numpy使用技巧之数组过滤的相关内容,具体如下。
当使用布尔数组b作为下标存取数组x中的元素时,将收集数组x中所有在数组b中对应下标为True的元素。使用布尔数组作为下标获得的数组不和原始数组共享数据空间,注意这种方式只对应于布尔数组(array),不能使用布尔列表(list)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
>>> x = np.arange( 5 , 0 , - 1 )
>>> x
array([ 5 , 4 , 3 , 2 , 1 ])
>>> x[np.array([ True , False , True , False , False ])]
>>> # 下标为True的取出来,布尔数组中下标为0,2的元素为True,因此获取x中下标为0,2的元素
array([ 5 , 3 ])
>>> x[[ True , False , True , False , False ]] #Error,这不是我们想要的结果
>>> # 如果是布尔列表,则把True当作1, False当作0,按照整数序列方式获取x中的元素
array([ 4 , 5 , 4 , 5 , 5 ])
>>> x[np.array([ True , False , True , True ])]
>>> # 布尔数组的长度不够时,不够的部分都当作False
array([ 5 , 3 , 2 ])
>>> x[np.array([ True , False , True , True ])] = - 1 , - 2 , - 3 #只修改下标为True的元素
>>> # 布尔数组下标也可以用来修改元素
>>> x
array([ - 1 , 4 , - 2 , - 3 , 1 ])
|
注意:布尔数组一般不是手工产生的,通常我们使用一条布尔表达式来得到,如:
1
2
3
4
5
6
7
8
9
10
11
|
>>> x = np.random.rand( 10 ) # 产生一个长度为10,元素值为0-1的随机数的数组
>>> x
array([ 0.72223939 , 0.921226 , 0.7770805 , 0.2055047 , 0.17567449 ,
0.95799412 , 0.12015178 , 0.7627083 , 0.43260184 , 0.91379859 ])
>>> x> 0.5
>>> # 数组x中的每个元素和0.5进行大小比较,得到一个布尔数组,True表示x中对应的值大于0.5
array([ True , True , True , False , False , True , False , True , False , True ], dtype = bool )
>>> x[x> 0.5 ] # x>0.5是一个布尔数组
>>> # 使用x>0.5返回的布尔数组收集x中的元素,因此得到的结果是x中所有大于0.5的元素的数组
array([ 0.72223939 , 0.921226 , 0.7770805 , 0.95799412 , 0.7627083 ,
0.91379859 ])
|
总结
以上就是本文关于numpy使用技巧之数组过滤实例代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!
原文链接:http://blog.csdn.net/linzch3/article/details/58584865