先来看下相关的说明 : np.where(condition, [x, y]),这里三个参数,其中必写参数是condition(判断条件),后边的x和y是可选参数.那么这三个参数都有怎样的要求呢?

condition:array_like,bool ,当为True时,产生x,否则产生y

简单说,对第一个参数的要求是这样的,首先是数据类型的要求,类似于数组或者布尔值,当判断条件为真时返回x中的值,否则返回y中的值

x,y:array_like,可选,要从中选择的值。 x,y和condition需要可广播到某种形状

x和y是可选参数,并且对这两个参数的数据类型要求只有类似数组这一条,当条件判断为true或者false时从这两个类似数组的容器中取数.

还有很重要的一点就是对三个参数的要求是都可以广播,也就是说对参数的形状做出了要求,对condition来说,是布尔值的时候无所谓形状,当时类似数组的容器时,与x和y的形状需要满足可广播的条件.

OK,前边的纯文字讲解到此结束,下边,通过例子来直观感受下.容我偷个懒,直接用了帮助文档中的例子:

情况一 : 三个参数完整

np.where([[True, False], [True, True]],

[[1, 2], [3, 4]],

[[9, 8], [7, 6]])

返回值:

array([[1, 8],

[3, 4]])

来看一下这个结果是怎么产生的.

完全符合np.where的语法要求,包含了condition,x和y.官方文档说,对condition进行判断,如果判断结果为true则取x中的值,否则取y中的值.可以看出condition是和x以及y形状相同的二维类数组形式,根据条件进行判断:

条件中第0个元素中的第0个元素是true,那么取x中的相对应元素1;

条件中第0个元素中的第1个元素是false,那么取y中的相对应元素8;

条件中第1个元素中的第0个元素是ture,那么取x中相对应的元素3;

条件中第1个元素中的第1个元素是ture,那么取x中相对应的元素4;

所以最后的结果中取出的元素是1,8,3,4.

有些刚入门的小可爱可能会对前边条件中的true和false有疑问,感觉没有进行什么判断吖,其实这里是直接给了判断结果,在我们判断两个值大小的时候最终的结果就是true或者false对不对.

情况二 : 只有condition参数

np.where([[0, 1], [1, 0]])

返回结果:(array([0, 1], dtype=int64), array([1, 0], dtype=int64))

需要注意的是,返回的结果是符合条件的位置信息!

看起来这里的condition还不如上边例子的condition好理解,这个0和1是怎么回事儿呢?

在python中,除了0,空和false,其他值都是true,所以这里的condition实际上和这样写没什么两样np.where([[False, True], [True, False]]).上边例子中,根据条件的判断结果选择从x或者y中取值,现在没有x和y了,最终结果返回的就是判断结果为true的元素所在的位置信息.

来验证下,结果中的两个数组分别反映的是判断结果为true的元素坐在的行信息和列信息,也就是判断结果为真的元素所在的位置时第0个元素中的第1个位置和第1个元素中的第0个位置,这个例子有点迷惑性,不好理解,我写了另一个更显的例子看一下

这个例子中判断结果为true的元素有四个,就是那四个1,所以返回的结果就是四个位置信息.

其他常用使用方式

上边的两个例子很适合讲解原理用,然而实际工作中还有其他常用的使用方式

新建一个数组:

x = np.arange(9.).reshape(3, 3)

x

返回结果:

array([[0., 1., 2.],

[3., 4., 5.],

[6., 7., 8.]])

筛选数组中符合条件的元素:

np.where( x > 5 )

返回结果:(array([2, 2, 2], dtype=int64), array([0, 1, 2], dtype=int64))

我们通过前边的例子知道只有一个条件参数时,返回的结果是判断结果为true的元素的位置信息,那么值大于5的元素在原数组中的位置就是第2个元素中的第0个元素,第2个元素中的第1个元素,第2个元素中的第2个元素,对应的是6,7,8这三个元素.

新的问题来了,我不想要位置信息,我想要元素值信息怎么办?

答案很简单,切片出来啊,比如我想要元素值大于3的所有元素:

x[np.where( x > 3.0 )]

返回结果:array([4., 5., 6., 7., 8.])

可以看出,切出的元素值是一维的数组,如果我想要切出的结果保持原数组的形状该怎么办呢?

铛铛铛,答案来了:

np.where(x < 5, x, -1)

返回结果:

array([[ 0., 1., 2.],

[ 3., 4., -1.],

[-1., -1., -1.]])

其实这里很简单,就是把三个参数都写全了,如果判断结果为真就从x(也就是原数组)中取数,否则从y中取数,这里的y指定了一个数,也就是所有判断结果为false的元素全部填充为同一个特定值,保证了结果的形状和原数组形状一样

除了上面进行大小的判断,也可以进行元素是否包含在指定容器中的判断

这是数组x :

array([[0., 1., 2.],

[3., 4., 5.],

[6., 7., 8.]])

新定义的目标列表和判断:

goodvalues = [3, 4, 7]

ix = np.isin(x, goodvalues)

ix

返回结果:

array([[False, False, False],

[ True, True, False],

[False, True, False]])

先通过np.isin来判断x中的元素是否在指定列表中,然后再通过np.where查找符合条件的位置信息:

np.where(ix)

返回结果:(array([1, 1, 2], dtype=int64), array([0, 1, 1], dtype=int64))

当然,如果不想要位置信息,需要元素值信息,可以直接切片出来,但是要搞清楚对谁进行切片哈,这里是判断x中的哪些元素同时包含于goodvalues中,所以是对x进行切片

x[np.where(ix)]

返回结果:array([3., 4., 7.])

以上是对np.where一些浅显的理解

python中的np where_numpy中的np.where相关推荐

  1. python对数运算符号_科学网—Python中算数运算符之注意及np.logspace - 张伟的博文...

    (一)算数运算符 数字2 是一个整数的例子. 长整数 不过是大一些的整数. 3.23和52.3E-4是浮点数的例子.E标记表示10的幂.在这里,52.3E-4表示52.3 * 10-4. (-5+4j ...

  2. [转载] python numpy.sqrt_python中numpy库ndarray多维数组的的运算:np.abs(x)、np.sqrt(x)、np.modf(x)等...

    参考链接: Python中的numpy.tan numpy库提供非常便捷的数组运算,方便数据的处理. 1.数组与标量之间可直接进行运算 In [45]: a Out[45]: array([[ 0, ...

  3. python中zeros用法_python中numpy.zeros(np.zeros)的使用方法

    python 的 python中numpy.zeros(np.zeros)的使用方法 翻译: 用法:zeros(shape, dtype=float, order='C') 返回:返回来一个给定形状和 ...

  4. python 三维数组,numpy中np.shape的理解

    python 三维数组,numpy中np.shape的应用 直接贴图对于shape函数一般表示输出数组的形状,对于二维数组就是输出行与列,对于三维数组,shape[0]表示三维数组中包含多少个二维数组 ...

  5. pythonzeros函数_zeros函数是什么意思?python中np.zeros中的参数是什么意思

    zeros函数是什么意思?python中np.zeros中的参数是什么意思 发表时间:2020-01-06 21:09:14 小编:4326手游网 阅读: 在手机上看 手机扫描阅读 MATLAB中ze ...

  6. python np arrange_python中np.arrange用法

    转载:https://www.cnblogs.com/ghllfl/p/8487692.html np.arange()经常用,其用法总结如下: np.arange(0,60,2) 生成从0到60的步 ...

  7. 算法中的P问题、NP问题、NP难问题和NP完全问题

    P问题:该问题存在一个可以在多项式时间内解决该问题的算法.(P:polynominal,多项式) 为什么我们要研究这个?因为计算机处理的输入常常不是那么几十个几千个那么一点点,想象一下,当计算机处理的 ...

  8. 使用Python和OpenCV检测图像中的条形码

    使用Python和OpenCV检测图像中的条形码 1. 效果图 2. 算法的步骤 3. 源码 参考 这篇博客将介绍使用计算机视觉和图像处理技术进行条形码检测的必要步骤,并演示使用Python编程语言和 ...

  9. 使用Python,OpenCV查找图像中的最亮点

    Python,OpenCV找出图像中的最亮点 1. 原理 2. 优化 3. 效果图 4. 源码 参考 这篇博客将向您展示如何使用Python和OpenCV查找图像中的最亮点,以及应用单行预处理代码-- ...

最新文章

  1. 计算机机房云部署,公共技能云机房建设方案及配置清单-20210405173307.pdf-原创力文档...
  2. java自动化开发_Java自动化开发指南
  3. unity, 非public变量需要加[SerializeField]才能序列化
  4. CodeForces - 1325F Ehabs Last Theorem(dfs树找最大环)
  5. mysql 客户服务号_mysql客户端及服务端常用实用工具功能总结
  6. 使用IntelliJ IDEA开发SpringMVC网站(五)博客文章管理
  7. 鬼子进村(洛谷 1503)
  8. vscode php debug
  9. APIcloud解决检出到指定路径:false问题
  10. linux下vmware的安装、物理分区使用及卸载
  11. 三级联动下拉列表的开发过程与范例
  12. VS2018+TensorFlow安装
  13. 【PBR理论】第2讲 BRDF理想漫反射(Diffuse)
  14. winform小程序-随机抽奖软件
  15. P1427 小鱼的数字游戏——栈的初次会面
  16. 信用卡诈骗罪16个有效辩点
  17. 11度青春之《老男孩》
  18. linux下使用iso文件安装yum
  19. 单片机位寻址举例_基于80C51单片机位寻址编程
  20. DUL[2020-CVPR]

热门文章

  1. SQL函数大全——实例
  2. 线程同步 阻塞 异步 非阻塞(转)
  3. [分享]组织机构图控件
  4. 《Oracle SQL疑难解析》——1.6 批量地从一个表中复制数据到另一个表
  5. HDFS配置Kerberos认证
  6. python常见的错误总结
  7. Android启动脚本init.rc(2)
  8. 汉字转换成全拼的拼音
  9. typedef、setw()
  10. 微信电脑客户端登陆_电脑端微信多开教程,多个微信同时登陆,工作生活两不误...