本文主要和大家介绍了详解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, 7, 8, 9], dtype=int64),)

>>>a=np.reshape(np.arange(20),(4,5))

>>>a

array([[ 0, 1, 2, 3, 4],

[ 5, 6, 7, 8, 9],

[10, 11, 12, 13, 14],

[15, 16, 17, 18, 19]])

>>>np.where(a>10)

(array([2, 2, 2, 2, 3, 3, 3, 3, 3], dtype=int64),

array([1, 2, 3, 4, 0, 1, 2, 3, 4], dtype=int64))

对numpy标准库里的解释做一个介绍:

numpy.where(condition[, x, y])

基于条件condition,返回值来自x或者y.

如果.参数:condition : 数组,bool值

When True, yield x, otherwise yield y.

x, y : array_like, 可选

x与y的shape要相同,当condition中的值是true时返回x对应位置的值,false是返回y的

返回值:out : ndarray or tuple of ndarrays

①如果参数有condition,x和y,它们三个参数的shape是相同的。那么,当condition中的值是true时返回x对应位置的值,false是返回y的。

②如果参数只有condition的话,返回值是condition中元素值为true的位置索引,切是以元组形式返回,元组的元素是ndarray数组,表示位置的索引

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

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

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

array([[1, 8],

[3, 4]])

>>>

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

(array([0, 1]), array([1, 0]))

>>>

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

>>> np.where( x > 5 )

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

>>> x[np.where( x > 3.0 )] # Note: result is 1D.

array([ 4., 5., 6., 7., 8.])

>>> np.where(x < 5, x, -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, 4, 7]

>>> ix = np.in1d(x.ravel(), goodvalues).reshape(x.shape)

>>> ix

array([[False, False, False],

[ True, True, False],

[False, True, False]], dtype=bool)

>>> np.where(ix)

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

两种方法的示例代码

第一种用法

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))

#试试效果

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))

python中where的用法_Python中where()函数的用法详解相关推荐

  1. python中exchange函数使用_python基于exchange函数发送邮件过程详解

    python基于exchange函数发送邮件过程详解 作者: shuzihua 更新时间:2020-11-06 10:40:35 原文链接 1.Python hasattr() 函数 描述 hasat ...

  2. c语言memset函数用法,C语言memset函数使用方法详解

    C语言memset函数使用方法详解 一.函数原形   void *  memset(void*s, int ch,size_t n) 二.函数作用  将以s内存地址为首的连续n个字节的内容置成ch,一 ...

  3. python动态类型的坑_python进阶教程之动态类型详解

    动态类型(dynamic typing)是Python另一个重要的核心概念.我们之前说过,Python的变量(variable)不需要声明,而在赋值时,变量可以重新赋值为任意值.这些都与动态类型的概念 ...

  4. python对文件的处理_python文件处理fileinput使用方法详解

    这篇文章主要介绍了python文件处理fileinput使用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.介绍 fileinput模块 ...

  5. python是基于什么原理_Python基于class()实现面向对象原理详解

    首先,类是一个集合,包含了数据,操作描述的一个抽象集合 你可以首先只把类当做一个容器来使用 class Cycle: def __init__(self,r): self.pi=3.14 self.r ...

  6. python编写自动化脚本工具_python自动化工具之pywinauto实例详解

    本文实例为大家分享了python自动化工具pywinauto,供大家参考,具体内容如下 一.win环境应用自动化 1.浏览器中下载 2.在cmd下启动:python get-pip.py 3.在cmd ...

  7. python三种等待方式_Python selenium 三种等待方式详解

    本文摘自:http://blog.csdn.net/huilan_same/article/details/52544521 发现太多人不会用等待了,博主今天实在是忍不住要给大家讲讲等待的必要性. 很 ...

  8. python的类和对象_Python面向对象之类和对象实例详解

    本文实例讲述了Python面向对象之类和对象.分享给大家供大家参考,具体如下: 类和对象(1) 对象是什么? 对象=属性(静态)+方法(动态): 属性一般是一个个变量:方法是一个个函数: #类的属性 ...

  9. python画图软件是哪个_Python实现画图软件功能方法详解

    Python实现画图软件功能方法详解,按钮,事件,绑定,快捷键,直线 Python实现画图软件功能方法详解 易采站长站,站长之家为您整理了Python实现画图软件功能方法详解的相关内容. 概述 虽然P ...

  10. python模拟登录详细教程_Python模拟登录requests.Session应用详解

    最近由于某些原因,需要用到Python模拟登录网站,但是以前对这块并不了解,而且目标网站的登录方法较为复杂, 所以一下卡在这里了,于是我决定从简单的模拟开始,逐渐深入地研究下这块. 注:本文仅为交流学 ...

最新文章

  1. mysql binlog 目录_怎么查看mysql 的binlog日志存放的位置(linux和win)
  2. TensorRT加速 ——NVIDIA终端AI芯片加速用,可以直接利用caffe或TensorFlow生成的模型来predict(inference)...
  3. leetcode算法题--句子中的有效单词数
  4. python程序如何循环_在Python的一段程序中如何使用多次事件循环详解
  5. Ubuntu 18.0.4 安装Selenium 详细流程(亲测有效)
  6. android 模糊查询搜索框_彻底搞懂 iOS 和 Android 的设计差异
  7. delphi 调 web api_小程序web同构Kbone
  8. Nginx系列篇二:linux搭建Nginx负载均衡
  9. 论文学习20-End-to-end Sequence Labeling via Bi-directional LSTM-CNNs-CRF(序列标注,2016ACL
  10. Python cmp函数在Python3.4版本后就不存在了。全部换成了operator库了
  11. Java编码问题原因以及解决
  12. 计算两个经纬度之间的距离软件_小程序使用腾讯位置服务计算两地之间的距离(有源码)...
  13. scm中mysql作用_scm供应链管理的作用
  14. 使用 RetroShare 分享资源
  15. 8分之七怎么用计算机,如何用八屏电脑看盘
  16. 矢量网络分析仪VNA的校准之SOLT方法
  17. python 大文件分片上传_Python实现大文件分片上传
  18. 【机器人学】冗余七自由度机械臂的解析解逆解算法
  19. 诸暨机器人餐厅价格_诸暨店口镇机器人检测管道施工公司价格清道夫2020
  20. BugReport 概述

热门文章

  1. “易燃易爆炸”的零食产业该如何“控温”?
  2. Kafka配置用户名密码访问
  3. Armadillo使用介绍(五):any,all,.is_zero
  4. 2018-2019-2 20165212《网络对抗技术》Exp2 后门原理与实践
  5. 9个杀手级的PHP项目,快来收藏使用
  6. vue 模拟双色球机选
  7. 利用JavaScript实现倒计时
  8. 评深圳“小三”公然约男子过夜 激怒原配被刺杀
  9. php关键词匹配度排序,MySQL_mysql 关键词相关度排序方法详细示例分析,小项目有时需要用到关键词搜 - phpStudy...
  10. [由零开始]Guava Cache介绍和用法