numpy.where函数是三元表达式的向量形式
三元表达式
x=a if b else c
如果b为真,则x=a,如果b为假,则x=c。
如下
In [45]: xarr = np.array([1.1, 1.2, 1.3, 1.4, 1.5])
In [46]: yarr = np.array([2.1, 2.2, 2.3, 2.4, 2.5])
In [47]: cond = np.array([True, False, True, True, False])
In [48]: [(x if c eles y) for x,y,c in zip(xarr,yarr,cond)]
Out[48]: [1.1000000000000001, 2.2000000000000002, 1.3, 1.3999999999999999, 2.5]
np.where
In [49]: np.where(cond,xarr,yarr)
Out[49]: array([ 1.1, 2.2, 1.3, 1.4, 2.5])
数据分析中where的典型用法是根据另外的array,产生一个新的array。其中的第二个或者第三个参数没必要都是array也可以是非向量的值。
In [147]: arr = np.random.randn(4, 4)
In [148]: arr
Out[148]:
array([[ 0.6372, 2.2043, 1.7904, 0.0752],
[-1.5926, -1.1536, 0.4413, 0.3483],
[-0.1798, 0.3299, 0.7827, -0.7585],
[ 0.5857, 0.1619, 1.3583, -1.3865]])
In [149]: np.where(arr > 0, 2, -2)#可以两个都是数值
Out[149]:
array([[ 2, 2, 2, 2],
[-2, -2, 2, 2],
[-2, 2, 2, -2],
[ 2, 2, 2, -2]])
In [150]: np.where(arr > 0, 2, arr) # 可以一个数值,一个向量。当然,也可以是两个都是向量。如第一个列子
Out[150]:
array([[ 2. , 2. , 2. , 2. ],
[-1.5926, -1.1536, 2. , 2. ],
[-0.1798, 2. , 2. , -0.7585],
[ 2. , 2. , 2. , -1.3865]])