1.利用np.where(condition)来进行筛选,完全等价于np.nonzero()

(1)如下代码是从二维数组中筛选满足大于0的元素所在的索引位置.

import numpy as np
target=np.array([[1,2,3],[0,2,0],[1,2,3]])
where_res=np.where(target>0)
print('-'*20)
print(where_res)

执行结果如下:


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

可以看到,对于二维数组,在利用np.where()进行筛选时,返回的是满足条件的元素的索引,返回结果的结果是一个元祖,元祖中元素(数组格式)的个数与原数组的维度相等,且元祖中的每一个数组在元祖中的索引对应于原数组中的维度.元祖中每一个数组的值对应于满足条件的元素在原二维数组中各个维度上的索引.

(2)从二维数组中筛选满足大于0的元素.

import numpy as np
target=np.array([[1,2,3],[0,2,0],[1,2,3]])
where_res=np.where(target>0)
print(where_res)
print('-'*30)
print(target[where_res])

执行结果如下:

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

可以看到,按条件查找的元素的返回值为一个一维列表.

(3)修改二维数组中指定位置的元素值.

import numpy as np
target=np.array([[1,2,3],[0,2,0],[1,2,3]])
where_res=np.where(target>0)
print(where_res)
print('-'*30)
target[where_res]=100
print(target)

上述代码中将满足大于0的元素的值全部设置为100,执行结果如下:

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

可以看到,按条件(>0)的元素的值全部被重置为0.

!对于1中np.where()的用法,完全等价与np.nonzero(),下面举例说明:

import numpy as nptarget=np.array([[1,2,3],[0,2,0],[1,2,3]])
where_res=np.where(target>0)
print(where_res)
print(target[where_res])
print('-'*30)
nonzero_res=np.nonzero(target>0)
print(nonzero_res)
print(target[nonzero_res])

输出结果如下:

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

可以看到,np.where(conditon)与np.nonzero(condition)用法完全相同,都是用来返回数组中满足条件的元素的索引值.

2.直接利用算术表达式来进行筛选

(1)从二维数组中筛选满足大于0的元素所在的索引位置.

import numpy as np
target=np.array([[1,2,3],[0,2,0],[1,2,3]])
compare_res=target>0
print(compare_res)

执行结果如下:

[[ True  True  True][False  True False][ True  True  True]]

从运行结果来看,使用算术表达式来筛选数组中的元素时,其返回结果是一个列表,其shape与原数组的shape相同,满足条件的元素在其索引处为True,不满足为False.

(2)从二维数组中筛选满足大于0的元素.

import numpy as np
target=np.array([[1,2,3],[0,2,0],[1,2,3]])
compare_res=target>0
print(compare_res)
print('-'*30)
print(target[compare_res])

其运行结果如下:

[[ True  True  True][False  True False][ True  True  True]]
------------------------------
[1 2 3 2 1 2 3]

可以看到,成功筛选出了原数组中满足条件的元素,为一维列表,尽管利用算术表达式和np.where()对某个数组进行条件判断时,其返回结果的形式不同,但是利用算术表达式筛选数组中的元素时,其结果等价与使用np.where().

(3)修改二维数组中指定位置的元素值.

import numpy as np
target=np.array([[1,2,3],[0,2,0],[1,2,3]])
compare_res=target>0
print(compare_res)
print('-'*30)
target[compare_res]=100
print(target)

执行结果如下:

[[ True  True  True][False  True False][ True  True  True]]
------------------------------
[[100 100 100][  0 100   0][100 100 100]]

可以看到,成功改变了原数组中满足条件的元素值,尽管利用算术表达式和np.where()对某个数组进行条件判断时,其返回结果的形式不同,但是利用算术表达式修改数组中的指定元素的值时,其结果等价于使用np.where().

3.利用np.where()和算术表达式来更改数组中满足条件的元素的值.

利用np.where()的另一种用法:

np.where(condition,x,y),满足条件输出x,不满足条件输出y

import numpy as nptarget=np.array([[1,2,3],[0,2,0],[1,2,3]])
condition=target>0#满足条件,则不改变原值,否则将元素值置为100
target_res=np.where(condition,target,100)
print(target_res)
print('-'*30)#满足条件,则将原元素置为1,否则将元素值置为1000
res=np.where(condition,1.5,1000)
print(res)

输出结果如下:

[[  1   2   3][100   2 100][  1   2   3]]
------------------------------
[[   1.5    1.5    1.5][1000.     1.5 1000. ][   1.5    1.5    1.5]]

numpy中按条件查找,搜索某些值的方法相关推荐

  1. 在Excel中根据条件查找匹配多个值

    在Excel中根据条件查找匹配多个值(vlookup只能匹配第一个值) 之前在深圳的时候就被问过这个问题,今天又遇到同事在问,索性记录在此. 如下图,根据E列的值,在A列中查找对应的数据,输出匹配行上 ...

  2. Python使用numpy中trim_zeros函数去除首尾0值的语法

    Python使用numpy中trim_zeros函数去除首尾0值的语法 目录 Python使用numpy中trim_zeros函数去除首尾0值的语法 #numpy中trim_zeros

  3. php去掉查询返回的字段序列,php数组函数序列之array_slice() - 在数组中根据条件取出一段值,并返回...

    array_slice()定义和用法 array_slice() 函数在数组中根据条件取出一段值,并返回. 注释:如果数组有字符串键,所返回的数组将保留键名.(参见例子 4) 语法 array_sli ...

  4. c语言多条件查找,Vlookup函数实现多条件查找,又有新方法了!

    原标题:Vlookup函数实现多条件查找,又有新方法了! Vlookup函数的多条件查找,一般有两种方法: 1.辅助列法 用&把多条连接到一起作为一列查找. A2 公式 =B2&&qu ...

  5. python怎么隔一个读取一个_Python实现中一次读取多个值的方法

    Python 2里面读取输入的函数是raw_input(), Python 3的是input(),读入一个值后回车读取输入就退出了,想要一次读取多个输入,可以像下面这样: a, b = raw_inp ...

  6. python读二进制格点雷达基数据_对numpy中二进制格式的数据存储与读取方法详解...

    使用save可以实现对numpy数据的磁盘存储,存储的方式是二进制.查看使用说明,说明专门提到了是未经压缩的二进制形式.存储后的数据可以进行加载或者读取,通过使用load方法. In [81]:np. ...

  7. EXCEL中多条件查找的15种方法探讨

    excel多条件查找的思路很多,例如查找.求和.最值.数据库等函数等等.像SUM函数.lookup函数.VLOOKUP+CHOOSE函数.OFFSET+MATCH函数.INDIRECT+MATCH函数 ...

  8. python阈值计算_python – 在numpy中计算超过阈值的数组值的最快方法

    使用cython可能是一个不错的选择. import numpy as np cimport numpy as np cimport cython from cython.parallel impor ...

  9. numpy元素特定条件查找过滤

    where a = np.array([[1,2,3,4,5],[6,7,8,9,10]]) #原始数据 e = (a > 6) |  (a <2)    #构造对原始数据进行筛选的条件 ...

  10. 如何用matlab读取npz文件,Python Numpy中数据的常用的保存与读取方法

    在经常性读取大量的数值文件时(比如深度学习训练数据),可以考虑现将数据存储为Numpy格式,然后直接使用Numpy去读取,速度相比为转化前快很多. 下面就常用的保存数据到二进制文件和保存数据到文本文件 ...

最新文章

  1. 细说Asp.net的IP地址屏蔽功能设计
  2. linux 内核 同步机制
  3. Windows Mobile下C++取屏幕分辨率的方法
  4. PIL 学习笔记(1)
  5. 唐骏:幸福与财富无关
  6. excel一些操作技巧
  7. matlab飞行数据仿真,基于MATLAB的飞行仿真
  8. mysql 搭建日志服务器_一、架构01-搭建日志服务器Rsyslog
  9. 程序员面试金典 - 面试题 16.14. 最佳直线(哈希map+set)
  10. 关于HTTPS的几个问题
  11. 虎牙李萌:网络视听内容的工业化生产正在提速
  12. ARC单例模式的实现
  13. ElasticSearch Group by Multi Field,多字段聚合
  14. 传智播客 机器学习之数据降维 学习笔记
  15. win10basic模式_BASIC的完整形式是什么?
  16. Matlab运行时报License错误
  17. EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER
  18. Discuz deleterow函数解析
  19. OneWay广告Unity版SDK接入
  20. 一次简单的流量控制实现

热门文章

  1. 【自省篇】软件开发七宗罪
  2. 如何(不)让你的Python代码不再晦涩难懂
  3. 手机通讯录式排序php,Android获取手机通讯录-根据排序方式进行
  4. 点餐APP 冲刺二总结
  5. 什么高大填空四个字动人_什么发亮填空四字词语
  6. 大数据给交通行业带来的五大变革 | 交通数据的深度应用
  7. Python二进制内容转为中文(二进制转中文)
  8. springboot打包错误:Failed to execute goal org.apache.maven.pluginsmaven-resources-plugin3.2.0
  9. android 联系人 拼音,Android 2.1 (Eclair)的中文联系人拼音检索问题
  10. matlab从无到有系列(五):基本图形图像处理功能