lee-romantic 's Blog
Everything is OK!
Toggle navigation
lee-romantic 's Blog
主页
About Me
归档
标签
np中where()用法
2018-11-18 14:07:46
501
0
0
lee-romantic
博客园参考地址: https://www.cnblogs.com/oxxxo/p/6129294.html Python中numpy的where()函数 `第一种用法` np.where(conditions,x,y) if (condituons成立): 数组变x else: 数组变y ``` import numpy as np x = np.random.randn(4,4) print(np.where(x>0,2,-2)) #试试效果 #输出#[[ 2 2 -2 2] [-2 -2 2 2] [ 2 -2 -2 2] [-2 2 -2 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,True,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,True,False]) cond1 = np.array([True,True,False,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,0,np.where(cond1,1,np.where(cond2,2,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, 7, 8, 9, 10, 11, 12, 13, 14, 15], dtype=int64),) x = np.arange(16).reshape(-1,4) print(np.where(x>5)) #(array([1, 1, 2, 2, 2, 2, 3, 3, 3, 3], dtype=int64), array([2, 3, 0, 1, 2, 3, 0, 1, 2, 3], dtype=int64)) #注意这里是坐标是前面的一维的坐标,后面是二维的坐标 ``` ``` ix = np.array([[False, False, False], [ True, True, False], [False, True, False]], dtype=bool) print(np.where(ix)) #输出:(array([1, 1, 2], dtype=int64), array([0, 1, 1], dtype=int64)) ```
上一篇:
pytorch学习:自定义Datasets以及DataLoader
下一篇:
MFC之简单进度条
0
赞
501 人读过
新浪微博
微信
腾讯微博
QQ空间
人人网
提交评论
立即登录
, 发表评论.
没有帐号?
立即注册
0
条评论
More...
文档导航
没有帐号? 立即注册