numpy.where (condition[, x, y])
numpy.where() 有两种用法:
1. np.where(condition, x, y)
满足条件(condition),输出x,不满足输出y。
如果是一维数组,相当于[xv if c else yv for (c,xv,yv) in zip(condition,x,y)]
>>> aa = np.arange(10) >>> np.where(aa,1,-1) array([-1, 1, 1, 1, 1, 1, 1, 1, 1, 1]) # 0为False,所以第一个输出-1 >>> np.where(aa > 5,1,-1) array([-1, -1, -1, -1, -1, -1, 1, 1, 1, 1]) >>> np.where([[True,False], [True,True]], # 官网上的例子 [[1,2], [3,4]], [[9,8], [7,6]]) array([[1, 8], [3, 4]])
上面这个例子的条件为[[True,False], [True,False]],分别对应最后输出结果的四个值。第一个值从[1,9]中选,因为条件为True,所以是选1。第二个值从[2,8]中选,因为条件为False,所以选8,后面以此类推。类似的问题可以再看个例子:
>>> a = 10 >>> np.where([[a > 5,a < 5], [a == 10,a == 7]], [["chosen","not chosen"], ["chosen","not chosen"]], [["not chosen","chosen"], ["not chosen","chosen"]]) array([['chosen', 'chosen'], ['chosen', 'chosen']], dtype='<U10')
2. np.where(condition)
只有条件 (condition),没有x和y,则输出满足条件 (即非0) 元素的坐标 (等价于numpy.nonzero)。这里的坐标以tuple的形式给出,通常原数组有多少维,输出的tuple中就包含几个数组,分别对应符合条件元素的各维坐标。
>>> a = np.array([2,4,6,8,10]) >>> np.where(a > 5) # 返回索引 (array([2, 3, 4]),) >>> a[np.where(a > 5)] # 等价于 a[a>5] array([ 6, 8, 10]) >>> np.where([[0, 1], [1, 0]]) (array([0, 1]), array([1, 0]))
上面这个例子条件中[[0,1],[1,0]]的真值为两个1,各自的第一维坐标为[0,1],第二维坐标为[1,0] 。
下面看个复杂点的例子:
>>> a = np.arange(27).reshape(3,3,3) >>> a array([[[ 0, 1, 2], [ 3, 4, 5], [ 6, 7, 8]], [[ 9, 10, 11], [12, 13, 14], [15, 16, 17]], [[18, 19, 20], [21, 22, 23], [24, 25, 26]]]) >>> np.where(a > 5) (array([0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2]), array([2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 2]), array([0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2])) # 符合条件的元素为 [ 6, 7, 8]], [[ 9, 10, 11], [12, 13, 14], [15, 16, 17]], [[18, 19, 20], [21, 22, 23], [24, 25, 26]]]
所以np.where会输出每个元素的对应的坐标,因为原数组有三维,所以tuple中有三个数组。
1、numpy.where的返回结果
numpy.where调用方式为numpy.where(condition,1,2)
满足条件的位置上返回结果1,不满足的位置上返回结果2
例如通过where()函数将a数组中负值设为0,正值不变
如果没有指定返回结果,只有查找条件则返回满足条件的位置。返回的结果是一个元组(tuple),包含两个数组,第一个数组纪录的是行,第二个数组纪录的是列。
可以使用zip函数将返回的位置组成一个个坐标对,方便调用。zip函数直接返回的是一个对象,可以用过for循环遍历出里面的元素,也可以使用list直接列出所有坐标对元素。
2、numpy.where多条件查询
与: numpy.where((con1)*(con2))或者用&
或:numpy.where((con1)|(con2)) (重点:多条件查询时条件一定要用括号!一定要用括号!一定要用括号!)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
问题内容: 尽管阅读了文档,这篇文章一篇文章,但我仍然无法正确理解。 有人可以提供有关1D和2D阵列的分步注释示例吗? 问题答案: 摆弄了一会儿后,我发现了问题,并将它们张贴在这里,希望对其他人有所帮助。 直观地,就像问“ 告诉我这个数组中的位置满足给定条件 ”。 它还可以用于获取满足条件的数组中的条目: 当是2d数组时,返回行idx的数组和col idx的数组: 与1d情况一样,我们可以用来获取
问题内容: 我正在玩耍并浏览文档,并且遇到了一些魔术。即我正在谈论: 它们如何在内部实现您能够将类似的东西传递给方法的功能?我想这与它有关,但是我正在寻找详细的解释。 问题答案: 他们如何在内部实现将x> 5之类的内容传递给方法的能力? 简短的答案是他们没有。 对numpy数组进行任何形式的逻辑运算都会返回一个布尔数组。(即,,等等都返回给定条件为true的布尔数组)。 例如 产量: 这就是为什么
问题内容: 我有一个3d数组,其中填充了从0到N的整数。我需要一个与该数组等于1、2、3,… N的位置对应的索引列表。我可以使用np.where进行如下操作: 但这很慢。根据这个问题 快速python numpy在哪里功能? 应该可以大大加快索引搜索的速度,但是我无法将那里提出的方法转移到我获取实际索引的问题上。加快上述代码的最佳方法是什么? 作为附加组件:我想稍后存储索引,使用np.ravel_
HAProxy 是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。
本文向大家介绍android popupwindow用法详解,包括了android popupwindow用法详解的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了android popupwindow的用法,供大家参考,具体内容如下 一、基本用法 一般做法,新建类继承popupwindow。例 研究下popupwindow源码,以showAsDropDown来讲 第11行创建Wind
本文向大家介绍详解ORACLE SEQUENCE用法,包括了详解ORACLE SEQUENCE用法的使用技巧和注意事项,需要的朋友参考一下 在oracle中sequence就是序号,每次取的时候它会自动增加。sequence与表没有关系。 1、Create Sequence 首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限。 创建语句如下: 2、得到Sequen