Tensorflow2.0笔记 - Tensor的数据索引和切片

        主要涉及的了基础下标索引"[]",逗号",",冒号":",省略号"..."操作,以及gather,gather_nd和boolean_mask的相关使用方法。

import tensorflow as tf
import numpy as np

tf.__version__

tensor = tf.random.uniform([1,5,5,3], minval=10, maxval=30, dtype=tf.int32)
print(tensor)
#最基础的索引方式,类似访问数组
print("========tensor[0]:========\n", tensor[0])
print("========tensor[0][1]:========\n", tensor[0][1])
print("========tensor[0][0][1]:========\n", tensor[0][0][1])
print("========tensor[0][0][0][1]:========\n", tensor[0][0][0][1])


#数据切片[start:end]方式,从start开始,end结束,注意切片方式总是返回一个vector
tensor = tf.range(10)

#取所有元素
print(tensor[:])
#取倒数1个元素
print(tensor[-1:])
#取倒数2个元素
print(tensor[-2:])
#取前两个元素
print(tensor[:2])
#取倒数第一个元素之前的所有元素
print(tensor[:-1])
#倒序采样
print(tensor[::-1])
#倒序间隔采样,倒序步长为2
print(tensor[::-2])
#从第8个元素开始,倒序采样,倒序步长为2
print(tensor[8::-2])
#从第6个元素开始,到第2个元素,倒序采样,倒序步长为1
print(tensor[6:2:-1])


#多维数据切片示例,生成一个随机数组,模拟4张5*5*3的图片数据,这里用整型数据做示例
tensor = tf.random.uniform([4,5,5,3], minval=0, maxval=256, dtype=tf.int32)

#取所有元素
print("=======tensor[:]========\n", tensor[:])
#取第一个维度,相当于取第一张图片
print("========tensor[0,:,:,:].shape========\n", tensor[0,:,:,:].shape)
#取第二个维度的所有信息
print("========tensor[0,1,:,:].shape========\n", tensor[0,1,:,:].shape)
#取最后一个维度的第一个维度信息,假设是RGB图像数据的话,就是取R通道的值
print("========tensor[:,:,:,0].shape========\n", tensor[:,:,:,0].shape)
#print(tensor[:,:,:,0])
#取最后一个维度的第二个维度信息,假设是RGB图像数据的话,就是取G通道的值
print("========tensor[:,:,:,1].shape========\n", tensor[:,:,:,1].shape)
#print(tensor[:,:,:,1])
#取所有图片的第1行
print("========tensor[:,0,:,:].shape========\n", tensor[:,0,:,:].shape)
print(tensor[:,0,:,:])

#间隔取数据,start:end:step,表示从start开始,end结束,每隔step取一个数据
#还是以前面的4张5*5*3的“图片”数据为例
#取前两张图片
print("========tensor[0:2,:,:,:].shape=========\n", tensor[0:2,:,:,:].shape)
#取所有图片的1,2,4行,1,2,4列的所有RGB数据
print("========tensor[:,0:5:2,0:5:2,:].shape=======\n", tensor[:,0:5:2,0:5:2,:].shape)
#取所有图片的1,3行,1,3列的所有RGB数据
print("========tensor[:,::3,::3,:].shape=======\n", tensor[:,::3,::3,:].shape)
#去掉图片上下的一行,左右的一列的所有RGB数据
print("========tensor[:,1:4:1,1:4:1,:].shape=======\n", tensor[:,0:5:2,0:5:2,:].shape)

#省略号方式索引,"...",表示取所有未指定维度的所有信息,可以结合","一起使用
tensor = tf.random.normal([2,4,5,5,3])
#取第0个元素的所有信息
print("========tensor[0,...].shape=========\n", tensor[0,...].shape)
#所有元素取最后一个维度某个数据,假设[2,4,5,5,3]表示的数据是2行数据,每一行数据由4张5*5*3大小的图片组成
#则下面的表达式取的是所有图片的R通道数据
print("========tensor[...,0].shape=========\n", tensor[...,0].shape)
#省略号在中间,还是以图片为例,取第0行元素的B通道数据
print("========tensor[0,...,2].shape=======\n", tensor[0,...,2].shape)


#selective索引方式,通过指定采样哪些维度的哪些数据来采样
#tf.gather,通过指定的索引和维度(axis)来收集数据
#假设下面的tensor表示的是4个班级,每个班级53个学生,5科的成绩
tensor = tf.random.normal([4,35,5])
#收集2号和3号班级的所有学生的成绩,等价于tensor[2:4].shape
print("========gather(axis=0,indices=[2,3])==========\n", tf.gather(tensor, axis=0, indices=[2,3]).shape)
#依次罗列班级2,1,3,0的所有学生的所有成绩
print("========gather(axis=0,indices=[2,1,3,0])==========\n", tf.gather(tensor, axis=0, indices=[2,1,3,0]).shape)
#收集每个班级的2,5,8,10,13号学生的所有成绩
print("========gather(axis=1,indices=[2,5,8,10,13])==========\n", tf.gather(tensor, axis=1, indices=[2,5,8,10,13]).shape)
#收集所有班级的第2门,第3门和第4门科目的成绩信息(以0为下标开始的序号)
print("========gather(axis=2,indices=[2,3,4])==========\n", tf.gather(tensor, axis=2, indices=[2,3,4]).shape)

#tf.gather_nd,更加高级的gather,可指定多个维度
#假设下面的tensor表示的是4个班级,每个班级53个学生,5科的成绩
tensor = tf.random.normal([4,35,5])

#假设我们想取1号班级5号学生的所有5科成绩
print("========gather_nd([1,5])==========\n", tf.gather_nd(tensor, [1,5]).shape)
#取0号班级,1号学生的第2门成绩,结果为标量
print("========gather_nd([0,1,2])==========\n", tf.gather_nd(tensor, [0,1,2]).shape)
#还是取0号班级,1号学生的第2门成绩,但是将标量放到一个向量中,注意中括号和结果的区别
print("========gather_nd([[0,1,2]])==========\n", tf.gather_nd(tensor, [[0,1,2]]).shape)
#取0号班级1号学生,2号班级5号学生和3号班级13号学生的所有5科成绩
print("========gather_nd([[0,1],[2,5],[3,13]])==========\n", tf.gather_nd(tensor, [[0,1],[2,5],[3,13]]).shape)

#boolean_mask索引,类似与opencv的mask概念,当对应mask为True时取对应元素,为False不取
#假设下面的tensor表示4张5*5*3的图片数据
tensor = tf.random.normal([4,5,5,3])

#不指定axis, 默认为0,表示第一个维度
#取第0张图片和第2张图片数据
print("========booean_mask(mask=[True,False,True,False])==========\n", tf.boolean_mask(tensor, mask=[True,False,True,False]).shape)
#指定axis=3,取所有图片的R,B通道数据
print("========booean_mask(mask=[True,False,True],axis=3)==========\n", tf.boolean_mask(tensor, mask=[True,False,True], axis=3).shape)
#指定多个维度
tensor = tf.random.uniform([2,3,4], minval=0, maxval=20, dtype=tf.int32)
print(tensor)
print("========tensor[0,1,:]====\n", tensor[0,0,:])
print("========tensor[0,2,:]====\n", tensor[0,2,:])
print("========tensor[1,1,:]====\n", tensor[1,1,:])
#取[0,0,:],[0,2,:],[1,1,:]
t = tf.boolean_mask(tensor, mask=[[True,False,True],[False,True,False]])
print("========booean_mask(mask=[[True,False,True],[False,True,False]])==========\n", t.shape)
print(t)

运行结果:

 

....

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/311928.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

if单分支,二分支,多分支,语句嵌套,while语句,for语句(Python实现)

一、主要目的: 1.熟悉程序设计结构的三种方式 2.掌握if单分支语句、if二分支语句、if多分支语句及if语句嵌套的使用方法 3.掌握while语句的使用方法 4.掌握for语句的使用方法 5.掌握循环嵌套的使用方法 二、主要内容和结果展现: 1&…

国产ULN2803达林顿驱动芯片为什么可兼容TI ULN2803A的参数特性分享,且可用于红外摄像机等产品中

随着安防视频监控系统工程的需求越来越广,销量也与日俱增。在红外摄像机的红外LED驱动电路应用中,驱动大多数选用达林顿驱动芯片,行业上有用到TI 的ULN2803A,在目前行情,国外芯片紧缺的情况下,不少企业会多…

第一次作业

作业一:安装Euler系统: 和以前安装红帽没多大差别,看以前文章就行 作业二:通过两台Linux主机怕配置ssh实现互相免密登录: 1. 客户端地址:192.168.146.131 服务器地址: 192.168.146.129 1、…

Spacedesk | 最新版本移动端扩展PC副屏

我的设备: 电脑:戴尔G15 5511、i7-11800H、Windows 11、RTX3060(推荐显卡高级一些,算力差点的可能带不动这款软件) 平板:荣耀V6、麒麟985、安卓10、分辨率2000*1200(手机也行,我用的平板&…

纯前端 —— 200行JS代码、实现导出Excel、支持DIY样式,纵横合并

前期回顾 Vue3 TS Element-Plus 封装Tree组件 《亲测可用》_vue3ts 组件封装-CSDN博客https://blog.csdn.net/m0_57904695/article/details/131664157?spm1001.2014.3001.5501 目录 具体思路: 1. 准备HTML结构 2. 定义CSS样式 3. 初始化表格数据 4. 创建表…

【K8S 存储卷】K8S的存储卷+PV/PVC

目录 一、K8S的存储卷 1、概念: 2、挂载的方式: 2.1、emptyDir: 2.2、hostPath: 2.3、NFS共享存储: 二、PV和PVC: 1、概念 2、请求方式 3、静态请求流程图: 4、PV和PVC的生命周期 5、…

鸿蒙Harmony--状态管理器--@Provide装饰器和@Consume装饰器详解

今天是1月11日号星期四,农历腊月初一,辞旧的岁月里,愿你守得云开、终见月明,迎新的时光中,愿你心御寒冬、顺遂无忧,岁末冬深,希望接下来的日子里足够幸运,攒足勇气、信心和运气&…

2024年1月1日孙溟㠭篆刻艺术展开幕式于北京大学北大书店成功举办

“印记青春——会说话的石头” 主题文化展盛大开幕 2024年1月1日正值新年伊始,由北京大学出版社、北大书店、不黑文化艺术学社、中国诗书画研究会三才书画院联合举办的“印记 青春——会说话的石头”主题篆刻艺术展,在北京大学新太阳学生中心拉开帷幕。 …

深度学习”和“多层神经网络”的区别

在讨论深度学习与多层神经网络之间的差异时,我们必须首先理解它们各自是什么以及它们在计算机科学和人工智能领域的角色。 深度学习是一种机器学习的子集,它使用了人工神经网络的架构。深度学习的核心思想是模拟人脑神经元的工作方式,以建立…

tailwindcss真的好用吗?

写在前面 今天写一篇关于tailwindcss 的文章,其实这个css技术已经出现很久了,在一些大型项目很多人也已经在用了,虽然不是说必须要会吧,但是没听说过肯定是不行的,他的操作逻辑应该是和unocss差不多,但是今…

【UE Niagara学习笔记】07 - 火焰的热变形效果

目录 效果 步骤 一、创建热变形材质 二、添加新的发射器 2.1 设置粒子材质 2.2 设置粒子初始大小 2.3 设置粒子持续生成 三、修改材质 四、设置粒子效果 在上一篇博客(【UE Niagara学习笔记】06 - 制作火焰喷射过程中飞舞的火星)的基础上继续…

[力扣 Hot100]Day2 字母异位词分组

题目描述 给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 出处 思路 这题有点考阅读理解,意思就是把输入数组中的所含字母相同但顺序不同的单词放到同…

主动学习基础-贝叶斯神经网络

引言 传统的深度神经网络一般都有过度自信的问题。 即使我给神经网络提供一个从来没有训练过的类别图像,神经网络也会输出一个类别。比如训练猫狗的分类器,如果你抛出一个人的图像,网络也会将其分类为猫或者狗。 在几乎所有现实世界的问题中…

Netty通信中的粘包半包问题(一)

前言 我们在日常开发过程中,客户端和服务端的连接大多使用的是TCP协议,因为我们要保证数据的可靠传输, 当网络中出现丢包时要求,要求数据包的发送端重传给接收端。而TCP是一种面向连接的传输层协议, 当使用TCP进行传输时&#xf…

YOLOv5改进有效涨点目录 | 包含卷积、主干、检测头、注意力机制、Neck上百种创新机制

⭐ YOLOv5改进有效系列目录 ⭐ 前言 Hello,各位读者们好 本专栏自开设一个月以来已经更新改进教程70余篇其中包含C2f、主干、检测头、注意力机制、Neck多种结构上创新,也有损失函数和一些细节点上的创新。同时本人一些讲解视频和包含我所有创新的YOLO…

2023年全国职业院校技能大赛(高职组)“云计算应用”赛项赛卷⑥

2023年全国职业院校技能大赛(高职组) “云计算应用”赛项赛卷6 目录 需要竞赛软件包环境以及备赛资源可私信博主!!! 2023年全国职业院校技能大赛(高职组) “云计算应用”赛项赛卷6 模块一…

MySQL:DML数据操作语言(添加,删除,修改),DDL数据查询语言(条件查询,分组查询,排序查询,分页查询)

目录 1.DML(数据操作语言)1.添加数据2.修改数据3.删除数据 2.DQL(数据查询语言)1.DQL-语法2.基本查询3.条件查询(WHERE)1.语法:2.条件:3.案例: 4.聚合函数1.介绍2.常见聚合函数3.语法4.案例 5.分组查询(GROUP BY&#…

Proteus仿真stm32f103r6输出PWM/正弦波

资料下载地址:Proteus仿真stm32f103r6输出PWM/正弦波 一、仿真图 Proteus仿真stm32f103r6输出PWM/正弦波 二、程序 #include "pbdata.h"u16 fre; void RCC_Configuration(void); void GPIO_Configuration(void); void TIM3_Configuration();void Dela…

SpringBoot项目docker镜像生成

1. 本文思路 拉取基础镜像基于镜像创建容器在容器中,安装所需依赖部署脚本提交容器,生成新的镜像编写Dockerfile,添加启动命令,生成最终镜像导出镜像 2. 操作步骤 2.1 基础环境 # 拉取镜像 docker pull centos:7.6.1810 # 运行…

C++ n皇后问题 || 深度优先搜索模版题

n− 皇后问题是指将 n 个皇后放在 nn 的国际象棋棋盘上,使得皇后不能相互攻击到,即任意两个皇后都不能处于同一行、同一列或同一斜线上。 现在给定整数 n ,请你输出所有的满足条件的棋子摆法。 输入格式 共一行,包含整数 n 。 …