numpy-查找操作大全
本文记录日常工作中遇到的查找操作,持续更新。
注意:输入必须是 数组,不能是 list
极值
min,max 返回极值
argmin(a, axis=None, out=None), 返回极值所在的位置;不带 axis,先拉直,再找极值;带 axis,找某个维度的极值
b = np.array([[1, 2, 3, 5], [4, 6, 2, 6]])
print(np.max(b)) # 返回最大值 6
print(np.min(b)) # 返回最小值 1
print(np.argmax(b)) # 返回第一个最大值的位置 5
print(np.argmin(b)) # 返回第一个最小值的位置 0 print(np.argmin(b, axis=1)) # [0 2]
NaN值
nan 值由多种表达形式,如 None,np.nan,np.NaN等
isnan,输入可以是 一维,也可以是 二维,返回布尔索引
x = np.array(range(10), dtype=np.float)
y = np.array(range(10,20))
print(x.shape) # (10,)
print(x) # [0. 1. 2. 3. 4. 5. 6. 7. 8. 9.]
print(y) # [10 11 12 13 14 15 16 17 18 19]
x[3] = None # 插入 nan
x[5] = np.NaN # 插入 nan
print(x) # [ 0. 1. 2. nan 4. nan 6. 7. 8. 9.] # isnan 返回索引
print(np.isnan(x)) # [False False False True False True False False False False]
print(y[np.isnan(x)]) # [13 15]
print(y[~np.isnan(x)]) # [10 11 12 14 16 17 18 19]
如果想返回数值索引,可如下操作
data4 = np.array([1, 3, np.nan, 5]) ## isnan 返回 nan 值的布尔下标
print np.isnan(data4) # [False False True False] ## where 找到 nan 值的数值下标
print np.where(np.isnan(data4)) # (array([2]),)
print np.where(~np.isnan(data4)) # (array([0, 1, 3]),)
注意,nan 值 不能用 where 查找
print(np.where(x != np.NaN)) # (array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]),) 这样不行
经常遇到这么一个错误
TypeError: ufunc 'isnan' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''
错误原因:有异常的数据类型,非 int float
解决方法:转换数据类型,.astype('float')
where 条件
where,返回tuple,第一个值是索引,第二个是空值
1. 输入必须是 数组,不能是 list
2. 输入一般是一维,行向量或者列向量都可以
3. 输入多维,将返回两个索引,行向量或者列向量返回不同
argwhere,直接返回索引,返回为二维数组,列向量
# list 返回错误
data = range(10)
print np.where(data>6) # (array([0]),) # 一维数组
data1 = np.array(range(0, 20, 2))
print np.where(data1>6) # (array([7, 8, 9]),)
print np.where(data1.T>6) # (array([7, 8, 9]),) # 二维数组
data2 = np.array([range(0, 20, 2)])
print np.where(data2>6) # (array([0, 0, 0]), array([7, 8, 9])) # 多行多列
data3 = np.array([range(10), range(10)])
print(data3)
print np.where(data3>6) # (array([0, 0, 0, 1, 1, 1]), array([7, 8, 9, 7, 8, 9]))
print np.where(data3.T>6) # (array([7, 7, 8, 8, 9, 9]), array([0, 1, 0, 1, 0, 1])) ## argwhere 直接返回索引
print np.argwhere(data1>6)
# [[4]
# [5]
# [6]
# [7]
# [8]
# [9]]
print np.argwhere(data1.T>6)
# [[4]
# [5]
# [6]
# [7]
# [8]
# [9]]
where 也可输入多个条件
# 求公共部分
print np.intersect1d([1, 4, 3], [3, 4, 5]) # [3 4] # 多个条件
data2 = np.array([1,5, 11,16,20])
print np.where(data2>10) # (array([2, 3, 4]),) print np.where((data2>10) & (data2<18)) # (array([2, 3]),)
print np.where(np.logical_and(data2>10, data2<18)) # (array([2, 3]),)
print np.intersect1d(np.where(data2>10)[0], np.where(data2<18)[0]) # [2 3]
extract 条件
extract(condition, arr),按某条件查找,返回元素
print(np.extract(np.isnan(x), x)) # [nan nan]
print(np.extract(np.isnan(x), y)) # [13 15]
print(np.extract(x>8, x)) # [9.]
非0元素
nonzero,返回tuple,第一个值是索引,第二个是空值
x = [1, 0, 3, 0]
print(np.nonzero(x)) # (array([0, 2]),)
未完待续...
numpy-查找操作大全的更多相关文章
- python中numpy矩阵运算操作大全(非常全)!
python中numpy矩阵运算操作大全(非常全) //2019.07.10晚python矩阵运算大全1.矩阵的输出形式:对于任何一个矩阵,python输出的模板是:import numpy as n ...
- PHP数组操作大全
<?php /** * File: phpstudy : array_test.php * Created by PhpStorm. * User: IhMfLy Pheonix@jtv-070 ...
- SQL语句操作大全
SQL语句操作大全 本文分为以下六个部分: 基础部分 提升部分 技巧部分 数据开发–经典部分 SQL Server基本函数部分 常识部分 一.基础 1.说明:创建数据库CREATE DATABAS ...
- MATLAB命令大全和矩阵操作大全
转载自: http://blog.csdn.net/dengjianqiang2011/article/details/8753807 MATLAB矩阵操作大全 一.矩阵的表示在MATLAB中创建矩阵 ...
- numpy 基础操作
Numpy 基础操作¶ 以numpy的基本数据例子来学习numpy基本数据处理方法 主要内容有: 创建数组 数组维度转换 数据选区和切片 数组数据计算 随机数 数据合并 数据统计计算 In [1]: ...
- SQLite3命令操作大全
SQLite3命令操作大全 SQLite库包含一个名字叫做sqlite3的命令行,它可以让用户手工输入并执行面向SQLite数据库的SQL命令.本文档提供一个样使用sqlite3的简要说明. 一.ql ...
- Numpy 数组操作
Numpy 数组操作 Numpy 中包含了一些函数用于处理数组,大概可分为以下几类: 修改数组形状 翻转数组 修改数组维度 连接数组 分割数组 数组元素的添加与删除 修改数组形状 函数 描述 resh ...
- MATLAB矩阵操作大全
转载自:http://blog.csdn.net/dengjianqiang2011/article/details/8753807 MATLAB矩阵操作大全 一.矩阵的表示 在MATLAB中创建矩阵 ...
- 二叉排序树(BST)创建,删除,查找操作
binary search tree,中文翻译为二叉搜索树.二叉查找树或者二叉排序树.简称为BST 一:二叉搜索树的定义 他的定义与树的定义是类似的,也是一个递归的定义: 1.要么是一棵空树 2.如果 ...
- Delphi Excel 操作大全
Delphi Excel 操作大全 (一) 使用动态创建的方法首先创建 Excel 对象,使用ComObj:var ExcelApp: Variant;ExcelApp := CreateOleObj ...
随机推荐
- idea2018.3.6安装与破解教程(亲测可用、破解到2100年)
最近,帮室友进行idea安装,之前自己安装借鉴的博客已404,在网上找了好几个都无效,想着总结一份备用. 此博客是又找了一台电脑,边安装边写的. 目录 (已安装好的,可以直接看idea2018.3.6 ...
- Android_(传感器)指南针
Android方向传感器 传感器中的X:如上图所示,规定X正半轴为北,手机头部指向OF方向,此时X的值为0,如果手机头部指向OG方向,此时X值为90,指向OH方向,X值为180,指向OE,X值为270 ...
- 自定义IPython提示符
首先创建IPython的自定义配置文件 $ ipython profile create 可以看到在HOME目录下: 多了两个配置文件 我们修改~/.ipython/profile_default/i ...
- Java程序,JVM之间的关系
java程序是跑在JVM上的,严格来讲,是跑在JVM实例上的.一个JVM实例其实就是JVM跑起来的进程,二者合起来称之为一个JAVA进程.各个JVM实例之间是相互隔离的. 每个java程序都运行于某个 ...
- 并发量,tps,qps
QPS/TPS/并发量/系统吞吐量的概念 2017年08月13日 17:24:47 阅读数:10682 我们在日常工作中经常会听到QPS/TPS这些名词,也会经常被别人问起说你的系统吞吐量有多大.这个 ...
- log4j动态配置参数
特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...
- 网络1911、1912 C语言第1次作业批改总结
一.评分规则 重点检查大家代码规范,变量名.大括号换行.缩进等发现不规范倒扣3分. 助教会进PTA查看大家代码的提交列表,发现不规范或抄袭,均扣分 每次作业完成后,至少邀请3个同学点评. 原作业地址: ...
- java栈和队列
栈 可变长数组实现 链表实现 数组与链表的对比队列 链表实现 栈 下压栈(简称栈)是一种基于后进后出(LIFO)策略的集合类型.这里学习分别用数组和链表这两种基础数据结构来实现 ...
- sshd_config已修改,ssh还是无法远程问题解决
环境:vmware下的debian10.2 /etc/sshd/sshd_config 配置文件已经完成修改开启允许root账号登录配置 ssh远程返回如下信息: [Administrator.NIH ...
- hive跑mapreduce报java.lang.RuntimeException: Error in configuring object
写于2016.7月 最近项目需要在hbase上做统计分析,在本机上装了hive,结果跑小批量数据sum时报错: hive> select count(*) from page_view; Tot ...