where基本使用
15.1、使用where 按照条件查询出两个字段的值
xarr = np.array([1, 2, 3, 4, 5])
yarr = np.array([-1, -2, -3, -4, -5])
cond = np.array([True, False, True, False, False])
np.where(cond, xarr, yarr)
Out[174]: array([ 1, -2, 3, -4, -5])
15.2、使用where在原有的array中填充常数
arr = np.random.randn(4, 4)
arr
Out[176]:
array([[ 1.2961233 , -2.88646621, 0.93438555, -1.25265235],
[ 0.48880916, 0.42995708, -0.64266328, 0.78978925],
[ 0.45636547, -0.73146585, 1.4273524 , -0.35658024],
[-0.33206549, -0.43699776, -1.3090687 , -0.22809868]])
np.where(arr > 0, 2, 4)
Out[178]:
array([[2, 4, 2, 4],
[2, 2, 4, 2],
[2, 4, 2, 4],
[4, 4, 4, 4]])
也可以将标量和数组联合:
np.where(arr > 0, 2, arr)
Out[179]:
array([[ 2. , -2.88646621, 2. , -1.25265235],
[ 2. , 2. , -0.64266328, 2. ],
[ 2. , -0.73146585, 2. , -0.35658024],
[-0.33206549, -0.43699776, -1.3090687 , -0.22809868]])
where扩展使用
15.3、使用where 查询出符合条件的值的位置
x = np.arange(9.).reshape(3, 3)
x
Out[12]:
array([[0., 1., 2.],
[3., 4., 5.],
[6., 7., 8.]])
np.where( x > 5 )
Out[13]: (array([2, 2, 2]), array([0, 1, 2]))
np.where( x > 4 )
Out[14]: (array([1, 2, 2, 2]), array([2, 0, 1, 2]))
x[np.where(x > 4)]
Out[15]: array([5., 6., 7., 8.])
15.4、获取bool矩阵中True的位置
goodvalues = [3, 4, 7]
ix = np.isin(x, goodvalues)
ix
Out[18]:
array([[False, False, False],
[ True, True, False],
[False, True, False]])
np.where(ix)
Out[19]: (array([1, 1, 2]), array([0, 1, 1]))
参考:https://docs.scipy.org/doc/numpy-1.15.1/reference/generated/numpy.where.html
暂时完结。