博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python numpy中nonzero()的用法
阅读量:4211 次
发布时间:2019-05-26

本文共 1494 字,大约阅读时间需要 4 分钟。

当使用布尔数组直接作为下标对象或者元组下标对象中有布尔数组时,都相当于用nonzero()将布尔数组转换成一组整数数组,然后使用整数数组进行下标运算。

nonzeros(a)返回数组a中值不为零的元素的下标,它的返回值是一个长度为a.ndim(数组a的轴数)的元组,元组的每个元素都是一个整数数组,其值为非零元素的下标在对应轴上的值。例如对于一维布尔数组b1,nonzero(b1)所得到的是一个长度为1的元组,它表示b1[0]和b1[2]的值不为0(False)。

>>> b1 = np.array([True, False, True, False])>>> np.nonzero(b1)    (array([0, 2]),)

对于二维数组b2,nonzero(b2)所得到的是一个长度为2的元组。它的第0个元素是数组a中值不为0的元素的第0轴的下标,第1个元素则是第1轴的下标,因此从下面的结果可知b2[0,0]、b[0,2]和b2[1,0]的值不为0:

>>> b2 = np.array([[True, False, True], [True, False, False]])>>> np.nonzero(b2)    (array([0, 0, 1]), array([0, 2, 0]))

当布尔数组直接做为下标时,相当于使用由nonzero()转换之后的元组作为下标对象:

>>> a = np.arange(3*4*5).reshape(3,4,5)[[[ 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 27 28 29]  [30 31 32 33 34]  [35 36 37 38 39]] [[40 41 42 43 44]  [45 46 47 48 49]  [50 51 52 53 54]  [55 56 57 58 59]]]>>> a[b2]array([[ 0,  1,  2,  3,  4],       [10, 11, 12, 13, 14],       [20, 21, 22, 23, 24]])>>> a[np.nonzero(b2)]array([[ 0,  1,  2,  3,  4],       [10, 11, 12, 13, 14],       [20, 21, 22, 23, 24]])

另一种对每一个维度寻找b2:

from numpy import *a = arange(4*3*3).reshape(4,3,3)b2 = array([[True, False, True], [True, False, False]])print aprint nonzero(b2)print  a[:, nonzero(b2)[0], nonzero(b2)[1]]

运行结果:

[[[ 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]]

[[27 28 29]

[30 31 32]
[33 34 35]]]
(array([0, 0, 1], dtype=int64), array([0, 2, 0], dtype=int64))
[[ 0 2 3]
[ 9 11 12]
[18 20 21]
[27 29 30]]

转载地址:http://cggli.baihongyu.com/

你可能感兴趣的文章
资源监控工具 - Hyperic HQ
查看>>
LoadRunner中Concurrent与Simultaneous的区别
查看>>
SiteScope - Agentless监控
查看>>
QTP测试.NET控件CheckedListBox
查看>>
使用QTP的.NET插件扩展技术测试ComponentOne的ToolBar控件
查看>>
用上帝之眼进行自动化测试
查看>>
为LoadRunner写一个lr_save_float函数
查看>>
PrefTest工作室全新力作-《性能测试与调优实战》课程视频即将上线
查看>>
质量度量分析与测试技术 培训大纲
查看>>
欢迎加入【亿能测试快讯】邮件列表!
查看>>
为什么我们的自动化测试“要”这么难
查看>>
LoadRunner性能脚本开发实战训练
查看>>
测试之途,前途?钱途?图何?
查看>>
HP Sprinter:敏捷加速器
查看>>
单元测试培训PPT
查看>>
adb常用命令
查看>>
通过LR监控Linux服务器性能
查看>>
通过FTP服务的winsockes录制脚本
查看>>
LRwinsocket协议测试AAA服务器
查看>>
Net远程管理实验
查看>>