由于最近学习的资料频繁出现numpy中的两个方法:nonzero()logical_and/or/not()两个用于判断的函数。由于觉得确实很方便(如果不使用pandas处理数据),所以这里对两个方法做一个记录,以便后面的使用参考。

np.nonzero(参数):

no.nonzero()函数是numpy中用于得到数组array中非零元素的位置(数组索引)的函数,很适合用来对数据下标的提取。着重需要强调的是nonzero函数中不仅可以放数值矩阵/行列,同样可以放布尔型(True、False)矩阵/行列,由于这个特性其适用范围更加的广泛和优秀,下面做一个简单的介绍和数据的实践。

  1. 只有df中非零元素才会有索引值,那些零值元素没有索引值;
  2. 返回的索引数值是一个二维的tuple数组,tuple中包含一维的array数组。每个array数组都是对一维数据判断的描述;
  3. 索引值数组的每一个array均是从一个维度上来描述其索引值。比如,如果df是一个二维数组,则索引值数组有两个array,第一个array从行维度来描述索引值;第二个array从列维度来描述索引值;
  4. 该np.transpose(np.nonzero(df)) 函数能够描述出每一个非零元素在不同维度的索引值;
  5. 通过df[nonzero(df)]得到所有a中的非零值;
  6. nonzero函数中可以适用布尔型矩阵,等同于对0、1矩阵的判断(这个布尔值可以是我们对矩阵的判断条件)。

代码(大多适用的情况):

# 所有数据皆从0开始索引import numpy as np
df = np.array([[1,0,1],[2,2,0,],[0,3,2]])
print(df)
# 原始矩阵
# [[1 0 1]
#  [2 2 0]
#  [0 3 2]]# 返回每个非0元素坐标的tuple数组(包含行、列描述信息)
result = np.nonzero(df)
print(result)
print(result[0],result[1])  # 行描述、列描述# (array([0, 0, 1, 1, 2, 2], dtype=int64), array([0, 2, 0, 1, 1, 2], dtype=int64))
# [0 0 1 1 2 2] [0 2 0 1 1 2]# 返回每个非0元素坐标
result = np.transpose(np.nonzero(df))
print(result)# [[0 0]
#  [0 2]
#  [1 0]
#  [1 1]
#  [2 1]
#  [2 2]]# 返回所有非0值
result = df[np.nonzero(df)]
print(result)# [1 1 2 2 3 2]# 对矩阵第二列判断
result = np.nonzero(df[:,1])
print(result)# (array([1, 2], dtype=int64),)       # 由于数据为1列,所以tuple返回一个array数组# 布尔值判断
# 判断矩阵第三列中大于1值值的行号
result = np.nonzero(df[:,2]>1)
print(df[:,2]>1)
print(result)# [False False  True]
# (array([2], dtype=int64),)

结合判断条件nonzero在矩阵中有着很大的操作空间(节约大量时间和代码量)。

logical_and/or/not(参数):

逻辑(与或非)运算,三者的调用方式:np.logical_and(x1, x2, *args, **kwargs) 非not没有x2参数

这里值得提醒一下的是,该方法可以结合上面的nonzero函数一同使用,做一个结合判断取值的方法。

与或非的使用自行学习,或者参考下面的代码输出来判断。我们依旧使用上面的数据矩阵来说明问题:

# 所有数据皆从0开始索引import numpy as np
df = np.array([[1,0,1],[2,2,0,],[0,3,2]])# 原始矩阵
print(df)# 获得第一列和第二列的布尔值,并将两者做与操作
result = np.logical_and(df[:,0]>0,df[:,1]>0)
print(df[:,0]>0,df[:,1]>0)
print(result)# [ True  True False] [False  True  True]
# [False  True False]# 或操作一个为真全为真
result = np.logical_or(df[:,0]>0,df[:,1]>0)
print(df[:,0]>0,df[:,1]>0)
print(result)# [ True  True False] [False  True  True]
# [ True  True  True]result = np.logical_not(df[:,0]>0)
result2 = np.logical_not(df[:,1]>0)
print(df[:,0]>0,df[:,1]>0)
print(result,result2)# [ True  True False] [False  True  True]
# [False False  True] [ True False False]

简单说明如上代码,最后附上nonzero函数与logical_and函数结合的一个例子:

import numpy as np
df = np.array([[1,0,1],[2,2,0,],[0,3,2]])# 原始矩阵
print(df)# [[1 0 1]
#  [2 2 0]
#  [0 3 2]]# 下面语句为 获取矩阵第一列与第二列同时不为0的行号
result = np.nonzero(np.logical_and(df[:,0]>0,df[:,1]>0))
print(df[:,0]>0,df[:,1]>0)
print(result[0])# [ True  True False] [False  True  True]
# [1]

极为方便的矩阵处理方法,可以应用与很多的情况,以上代码仅是做了简单的常用说明,具体问题具体分析使用。

numpy的nonzero()和logical_and/or/not()相关推荐

  1. python3 nonzero_浅谈python numpy中nonzero()的用法

    nonzero函数返回非零元素的目录. 返回值为元组, 两个值分别为两个维度, 包含了相应维度上非零元素的目录值. import numpy as np A = np.mat([[0,1,2,3,4, ...

  2. python numpy中nonzero()的用法

    nonzero函数返回非零元素的目录. 返回值为元组, 两个值分别为两个维度, 包含了相应维度上非零元素的目录值. import numpy as npA = np.mat([[0,1,2,3,4,3 ...

  3. 用Excel格式舍入数字

    Did you know that Excel limits the number of numbers that appear in a cell, in General format? I dis ...

  4. 如何快速修改文件重命名命名_更改Excel命名范围的地址

    如何快速修改文件重命名命名 In Excel, you can give a name to a range of cells, then use that name in a formula, or ...

  5. 突出显示中奖彩票号码

    No, I've never won the lottery, but that's probably because I don't buy tickets! Your odds of winnin ...

  6. 【numpy】numpy中np.nonzero()的用法

    nonzero(a) 返回数组a中非零元素的索引值数组. 只有a中非零元素才会有索引值,那些零值元素没有索引值: 返回的索引值数组是一个2维tuple数组,该tuple数组中包含一维的array数组. ...

  7. Numpy模块之nonzero函数

    Numpy的nonzero函数 (一)基本用法 nonzero函数的基本功能是返回一个元组,这个元组的元素个数等于数组的维度,而每个元组元素对应非零元素的一个维度,元组从左到右依次是axis=0,ax ...

  8. numpy.logical_and()函数的使用

    参考链接: numpy.logical_and 功能:逐元素计算逻辑与运算,详见代码: 实验1: Python 3.7.4 (tags/v3.7.4:e09359112e, Jul 8 2019, 2 ...

  9. 数据基础---numpy、pandas使用教程

    数组对象 Numpy库 Numpy最重要的一个特点是就是其N维数组对象,即ndarray,ndarray是一个通用的同构数据多维容器,其中的所有元素必须是相同类型的.每个数组都有一个shape(一个表 ...

最新文章

  1. HTML中的link的简单介绍和用法
  2. 英特尔首推物联网云平台设备管理
  3. mybatis控制台打印执行的sql语句
  4. 'webpack-dev-server' 不是内部或外部命令,也不是可运行的程序 或批处理文件的解决方法(webpack热加载)
  5. BugkuCTF-MISC题blind_injection
  6. 给初创业者的几点建议
  7. 博客园自定义样式(标题 h1 h2 h3)
  8. C语言中使输入的字符串反序输出,C语言: 写一函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串。...
  9. MATLAB Simulink仿真应用
  10. 微观经济学 读书笔记
  11. Java实现第三方短信接口发送短信验证码
  12. SWFObject 2.0 官方文档二
  13. IOS开发之——音乐播放器-资源和Model(02)
  14. 基于区块链的去中心化身份技术有哪些应用前景?
  15. 关于Onenote里项目符号Crtl+.无效的解决方法
  16. ArcMap导入数据到ArcSDE报000597或者000224的错误
  17. Flutter国际化
  18. 使用HorizontalListView仿车来了公交时刻表
  19. linux 权限rwxrwxrwx(4 2 1)详细说明
  20. 「得到」的竞品是谁?「王者荣耀」啊!

热门文章

  1. mysql分组后统计个数,然后计算出每组个数占比
  2. 前端Hover与动画过渡结合
  3. java synthetic_java中什么是Synthetic,为什么我做实验无法得到和他相同的结果?
  4. android 创建assetmanager文件,Android AssetManager
  5. 又要到双11了,聊聊电商圈成功的游戏跨界案例
  6. 西北民族大学计算机科学与技术排名,2019西北民族大学专业排名
  7. 埃隆·马斯克推荐的《你相信这台电脑吗?》上映,不火爆但AI威胁的论战又起(附视频地址)...
  8. 华为云计算HCIA(二)-存储
  9. 使用EasyCAT快速开发EtherCAT从站
  10. c语言中fmod()函数和log10()函数用法