Pytorch中torch.nonzero()函数解析

article/2025/10/2 17:27:49

一. torch.nonzero()函数解析

1. 官网链接

torch.nonzero(),如下图所示:
torch.nonzero()
torch.nonzero()

2. torch.nonzero()函数解析

2.1. 输入是一维张量,返回一个包含输入 input 中非零元素索引的张量,输出张量中的每行包含 input 中非零元素的索引,输出是二维张量torch.size(z,1), z 是输入张量 input 中所有非零元素的个数。
2.2. 输入是n维张量,如果输入 input 有 n 维,则输出的索引张量的size为torch.size(z,n) , 这里 z 是输入张量 input 中所有非零元素的个数。
无论输入是几维,输出张量都是两维,每行代表输入张量中非零元素的索引位置(在所有维度上面的位置)。
返回 input中非零元素的索引下标,n维input 中的元素的索引有n 个维度的索引下标。

3. 代码举例

3.1 输入一维张量torch.Size([5]),返回的是输入张量不为零的值在一维向量中的索引位置,输出二维张量torch.Size([4, 1]),4代表输入张量中不为零的个数,1代表在一维张量中的索引位置。

x = torch.tensor([1, 1, 1, 0, 1])
y = torch.nonzero(x)
x,x.shape,y,y.shape
输出结果如下:
(tensor([1, 1, 1, 0, 1]),torch.Size([5]),tensor([[0],[1],[2],[4]]),torch.Size([4, 1]))

3.2 输入二维张量torch.Size([4, 4]),返回的是不为零的值在二维向量中的坐标,例如[0, 0]、[0,2]代表的是二维向量第一行第一列,第一行第三列不为零,输出二维张量torch.Size([6, 2]),6代表输入张量中不为零的个数,2代表在二维张量中的索引位置。
input是2维的,一共有6个非0元素,所以输出是一个torch.Size([6, 2])的张量,表示每个非0元素的索引。读法是从左往右,比如输出张量的第0行[0,0],表示的就是input的第0行的第0个元素是非0元素,同理,输出张量的第1行[0,2],表示的就是input的第1行的第2个元素是非0元素等等。

x = torch.tensor([[0.6, 0.0, 0.9, 0.0],[0.0, 0.4, 0.0, 0.0],                            [0.0, 0.0, 1.2, 0.0],[0.0, 0.7, 0.0,-0.4]])
y = torch.nonzero(x)
x,x.shape,y,y.shape
输出结果如下:
(tensor([[ 0.6000,  0.0000,  0.9000,  0.0000],[ 0.0000,  0.4000,  0.0000,  0.0000],[ 0.0000,  0.0000,  1.2000,  0.0000],[ 0.0000,  0.7000,  0.0000, -0.4000]]),torch.Size([4, 4]),tensor([[0, 0],[0, 2],[1, 1],[2, 2],[3, 1],[3, 3]]),torch.Size([6, 2]))

3.3. 输入三维张量torch.Size([2, 3, 4]),返回的是不为零的值在三维向量中的坐标,将下面例子看作图像,那么图像维度大小[2,3,4]对应于[channels, width, height],例如[0, 0, 3]代表的是第一个通道第一行第一列不为零,输出二维张量torch.Size([13, 3]),13代表输入张量中不为零的个数,3代表在三维张量中的索引位置。
输出张量按行依次从左往右读,第0个通道第0行第0列的元素非0,第0个通道第1行第0列的元素非0,……,第1个通道第2行第2列的元素非0,第1个通道第2行第2列的元素非0。

x = torch.randn(2,3,4)
y = (x>0.1)
z = torch.nonzero(y)
x,x.shape,y,y.shape,z,z.shape
输出结果如下:
(tensor([[[ 0.3326, -0.9972, -0.4871, -1.3885],[ 0.4679, -1.7913,  2.0604,  0.3150],[-0.6156, -0.5204,  0.2902, -0.0780]],[[ 1.2206, -0.7150, -0.1662,  0.5120],[ 0.2907,  0.1285,  0.8520, -1.2698],[ 0.5176, -0.3800,  0.4408,  0.5073]]]),torch.Size([2, 3, 4]),tensor([[[ True, False, False, False],[ True, False,  True,  True],[False, False,  True, False]],[[ True, False, False,  True],[ True,  True,  True, False],[ True, False,  True,  True]]]),torch.Size([2, 3, 4]),tensor([[0, 0, 0],[0, 1, 0],[0, 1, 2],[0, 1, 3],[0, 2, 2],[1, 0, 0],[1, 0, 3],[1, 1, 0],[1, 1, 1],[1, 1, 2],[1, 2, 0],[1, 2, 2],[1, 2, 3]]),torch.Size([13, 3]))

http://chatgpt.dhexx.cn/article/ullOajOb.shtml

相关文章

pytorch中nonzero()的用法

pytorch中nonzero()的用法 nonzero&#xff08;&#xff09;&#xff1a;返回一个包含输入Input中非0元素索引的张量&#xff08;以张量的形式返回非0索引&#xff09; 一维中&#xff1a; import torcha torch.Tensor([1,2,4,4,5]) print(torch.nonzero(a<4))a<4&…

python nonzero()函数的用法

举个栗子说明一下nonzero()函数的用法&#xff1a; 首先构建一个简单的矩阵&#xff1a; from numpy import * a mat([[1,1,0],[1,1,0],[1,0,3]]) print(a)输出结果如下图&#xff1a; print(a.nonzero()) 第一个array表示非零元素所在的行&#xff0c;第二个array表示非零元…

numpy中的nonzero()

nonzero(a) nonzero函数是numpy中用于得到数组array中非零元素的位置&#xff08;数组索引&#xff09;的函数。它的返回值是一个长度为a.ndim(数组a的轴数)的元组&#xff0c;元组的每个元素都是一个整数数组&#xff0c;其值为非零元素的下标在对应轴上的值。 &#xff08;…

Python中nonzero()函数的用法

Python中nonzero()函数可以提取出矩阵中非零元素的行列。用法如下&#xff1a; import numpy as npdata np.array([[1, 0, 2], [0, 3, 0], [0, 0, 0]]) print(data) print(data.nonzero())运行结果如下&#xff1a; 可以看到&#xff0c;非零元素被分成行和列。 当然对于稀…

Vue之绑定class/style样式与条件渲染

1.绑定class样式: <div id"root"> <!-- 绑定class样式--字符串写法&#xff0c;适用于&#xff1a;样式的类名不确定&#xff0c;要动态确定--><div class"basic" :class"mood" click"change()">{{name}}</d…

vue3 样式绑定class绑定

class绑定1:classsty为一个变量&#xff0c;当用引起来时为一个字符串&#xff0c;sty其值为vm中data的box1取box1样式,触发点击事件后sty取值为sty2,取的sty2的样式。 class2样式绑定二 class 类名为多类名&#xff0c;类名为对象中的属性&#xff0c;属性名作为类名&#xf…

Vue.js绑定class属性

绑定class属性的格式是 v-bind:class "语句", 可以缩写为 :class "语句" 。class属性是可以有多个的&#xff0c;在" "内可以有多种不同的情况。下面介绍在" "写入的不同情况。 目录 一、" "内是vue对象内存在的对…

vue动态绑定class的几种方式

参考链接&#xff1a;vue动态绑定class的几种方式 - 走看看 vue动态绑定class的几种方式&#xff1a; 方式①&#xff1a;直接三元表达式判断&#xff0c;动态绑定类名 :class"isUsed ? ruleUsedLabel : ruleUnusedLabel" 方式②&#xff1a;绑定对象 &#xf…

初学必懂—vue绑定class的几种方式+绑定内联样式总结

文章目录 本篇博客主要学习内容&#x1f33c;对象语法&#x1f33a;数组语法&#x1f34d;绑定内联样式&#x1f349; 本篇博客主要学习内容&#x1f33c; 先来看看以下这些语句都熟不熟悉吧&#xff01;这些节选于后续的博客内容&#x1f33b;&#x1f33b;&#x1f33b; &l…

22.Vue绑定class样式

目录 1.绑定class样式-字符串写法&#xff08;适用于样式的类名不确定&#xff0c;需要动态指定&#xff09; 2.绑定class样式-数组写法&#xff08;适用于样式的个数不确定&#xff0c;名字也不确定&#xff09; 3.绑定class样式-对象写法&#xff08;适用于样式的个数确定…

Vue基础知识总结 2:vue 动态绑定

&#x1f3c6;作者简介&#xff1a;哪吒&#xff0c;CSDN2022博客之星Top1、CSDN2021博客之星Top2、多届新星计划导师✌、博客专家&#x1f4aa;&#xff0c;专注Java硬核干货分享&#xff0c;立志做到Java赛道全网Top N。 &#x1f3c6;本文收录于&#xff0c;Java基础教程系列…

SQL语句:将查询结果合并一起,语句优化

需求驱动 为了使得表格更好看些&#xff0c;我需要把查询结果合在一起&#xff0c;这样看起来就是一体的了。主要是性能测试有需求&#xff1a; 1、查询当前库设备 2、查询新增设备 3、计算每秒鉴权数 这个对我来说比较简单&#xff0c;分开查询就可以了。但我对自己不能要求这…

sql查询将多个结果合并成一个字符串(GROUP_CONCAT和CONCAT)

完整语法如下 group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator 分隔符]) SELECT * FROM testgroup 表结构与数据如上 现在的需求就是每个id为一行 在前台每行显示该id所有分数 group_concat 上场&#xff01;&#xff01;&#xff01; SELECT…

Mysql合并两个sql结果

第一条sql及结果 SELECT value4 AS ‘压缩机功率’, create_date AS ‘时间’ FROM gree_data WHERE data_belong ‘External_05’ AND create_date > ‘2019-10-23 17:03:59’ ORDER BY create_date 结果展示&#xff1a; 第二条sql及结果 SELECT value2 AS ‘工作模…

sql——合并两个sql的结果

表结构 iot_street_road表&#xff1a; iot_street_staff_road表&#xff1a; iot_street_tree表: 想得到结果&#xff1a; road_namestaff_counttree_count街道名工人数量苗木数量 实现方法&#xff1a; 把表一和表二、表一和表三分别按road_id聚合&#xff0c;得到的结果合…

SQL查询结果拼接

Sql查询结果进行拼接 对查询结果进行拼接&#xff0c;可使用group_concat()&#xff0c;concat()&#xff0c;concat_ws()函数。简单介绍下如何应用。 Mysql中的group_concat() 功能&#xff1a;可以group by产生的同一分组的值连接起来,返回一个字符串。 参数格式&#xff…

sql查询结果合并

使用group_concat合并多行查询结果为一行select gs.id id,gs.gs_no gs_no,gs.apply_date apply_date,gs.create_by create_by,group_concat(gd.name) name,gs.apply_description apply_description,gd.unit_name unit_name,gs.apply_status apply_status,gs.apply_by apply_by …

oracle 将多个查询结果合并

首先要区分一个概况&#xff0c;多个查询结果分两种&#xff0c;一种是一条sql查询多个结果&#xff0c;还有一种是多条sql语句查询出多个结果。 先看第一个&#xff0c;一条语句查询出多个结果&#xff0c;将多个结果合并成一条记录&#xff1a; 在oracle中有一个wm_concat()函…

mysql 合并两个查询结果

合并两个查询结果 查询结果1&#xff1a; select date(complete_time) as time,sum(amt) as amount_out from withdraw where state3 group by date(complete_time) 查询结果2 select date(update_time) as time,sum(transfer_amount) as amount_in from user_charge where st…

SQL合并查询数据,以逗号分隔

功能描述&#xff1a; 将查询到的数据合并为一条数据&#xff0c;以逗号分隔 案例&#xff1a; 功能描述&#xff1a; 现有三张表&#xff1a; Student&#xff08;学生表&#xff09; Course&#xff08;课程表&#xff09; Student-Course&#xff08;学生课程关联表&am…