详解Python中where()函数的用法
where()的用法 首先强调一下,where()函数对于不同的输入,返回的只是不同的。 1当数组是一维数组时,返回的值是一维的索引,所以只有一组索引数组 2当数组是二维数组时,满足条件的数组值返回的是值的位置索引,因此会有两组索引数组来表示值的位置 例如 >>>b=np.arange(10) >>>b array([0,1,2,3,4,5,6,7,8,9]) >>>np.where(b>5) (array([6,9],dtype=int64),) >>>a=np.reshape(np.arange(20),(4,5)) >>>a array([[ 0,4],[ 5,[10,11,12,13,14],[15,16,17,18,19]]) >>>np.where(a>10) (array([2,3],array([1,dtype=int64)) 对numpy标准库里的解释做一个介绍: numpy.where(condition[,x,y]) 基于条件condition,返回值来自x或者y. 如果.
>>> np.where([[True,False],[True,True]],... [[1,2],[3,4]],... [[9,8],[7,6]]) array([[1,4]]) >>> >>> np.where([[0,1],[1,0]]) (array([0,1]),0])) >>> >>> x = np.arange(9.).reshape(3,3) >>> np.where( x > 5 ) (array([2,2]),array([0,2])) >>> x[np.where( x > 3.0 )] # Note: result is 1D. array([ 4.,5.,6.,7.,8.]) >>> np.where(x < 5,-1) # Note: broadcasting. array([[ 0.,1.,2.],[ 3.,4.,-1.],[-1.,-1.,-1.]]) Find the indices of elements of x that are in goodvalues. >>> >>> goodvalues = [3,7] >>> ix = np.in1d(x.ravel(),goodvalues).reshape(x.shape) >>> ix array([[False,False,[ True,True,[False,False]],dtype=bool) >>> np.where(ix) (array([1,1])) 两种方法的示例代码 第一种用法 np.where(conditions,y) if (condituons成立): 数组变x else: 数组变y import numpy as np ''' x = np.random.randn(4,4) print(np.where(x>0,-2)) #试试效果 xarr = np.array([1.1,1.2,1.3,1.4,1.5]) yarr = np.array([2.1,2.2,2.3,2.4,2.5]) zarr = np.array([True,False]) result = [(x if c else y) for x,y,c in zip(xarr,yarr,zarr)] print(result) #where()函数处理就相当于上面那种方案 result = np.where(zarr,xarr,yarr) print(result) ''' #发现个有趣的东西 # #处理2组数组 # #True and True = 0 # #True and False = 1 # #False and True = 2 # #False and False = 3 cond2 = np.array([True,False]) cond1 = np.array([True,False]) #第一种处理 太长太丑 result = [] for i in range(4): if (cond1[i] & cond2[i]): result.append(0); elif (cond1[i]): result.append(1); elif (cond2[i]): result.append(2); else : result.append(3); print(result) #第二种 直接where() 很快很方便 result = np.where(cond1 & cond2,np.where(cond1,np.where(cond2,3))) print(result) #第三种 更简便(好像这跟where()函数半毛钱的关系都没有 result = 1*(cond1 & -cond2)+2*(cond2 & -cond1)+3*(-(cond1 | cond2)) (没想到还可以这么表达吧) print(result) 第二种用法 where(conditions) 相当于给出数组的下标 x = np.arange(16) print(x[np.where(x>5)]) #输出:(array([ 6,9,10,14,15],) x = np.arange(16).reshape(-1,4) print(np.where(x>5)) #(array([1,array([2,dtype=int64)) #注意这里是坐标是前面的一维的坐标,后面是二维的坐标 ix = np.array([[False,dtype=bool) print(np.where(ix)) #输出:(array([1,dtype=int64)) 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |