torch.tensor拼接与list(tensors)

2023-10-26

Construct list(tensors)

创建一个包含张量的列表,以及2个张量如下:

import toroch

a = [torch.tensor([[0.7, 0.3], [0.2, 0.8]]), 
     torch.tensor([[0.5, 0.9], [0.5, 0.5]])]
b = torch.tensor([[0.1, 0.9], [0.3, 0.7]])
c = torch.tensor([[0.1, 0.9, 0.5], [0.3, 0.7, 0.0]])

To stack list(tensors)

堆叠之前对stack函数做一点说明。Stack操作,先升维,再扩增。参考stack与cat。对张量进行堆叠操作,要求张量的shape一致:

stack1 = torch.stack(a)  # default: dim=0, [2, 2, 2]
print(stack1)
stack2 = torch.stack((stack1, b), 0)
print(stack2)

output:

 tensor([[[0.7000, 0.3000],
     [0.2000, 0.8000]],
    [[0.5000, 0.9000],
     [0.5000, 0.5000]]])

RuntimeError: 
stack expects each tensor to be equal size, but got [2, 2, 2] at entry 0 and [2, 2] at entry 1

To concatenate list(tensors)

c = torch.cat([torch.stack(a), b[None]], 0)
# (2, 2, 2), (1, 2, 2) ⇒ (3, 2, 2)
print(c)

Output:

   tensor([
   [[0.7000, 0.3000],
     [0.2000, 0.8000]],

   [[0.5000, 0.9000],
     [0.5000, 0.5000]],

   [[0.1000, 0.9000],
     [0.3000, 0.7000]]])

但是,如果要使用stack替代上述cat操作,则会报错,因为stack要求两个输入的shape完全相同,而cat允许非拼接部分不同。除了torch.cat以外,也可以使用list.append完成以上操作。

a.append(b)
print(a)
a.append(c)
print(a)
[tensor([[0.7000, 0.3000],[0.2000, 0.8000]]),
tensor([[0.5000, 0.9000], [0.5000, 0.5000]]), 
tensor([[0.1000, 0.9000], [0.3000, 0.7000]])]

[tensor([[0.7000, 0.3000], [0.2000, 0.8000]]), 
tensor([[0.5000, 0.9000], [0.5000, 0.5000]]), 
tensor([[0.1000, 0.9000], [0.3000, 0.7000]]), 
tensor([[0.1000, 0.9000, 0.5000],
       [0.3000, 0.7000, 0.0000]])]

注意到,list.append()不仅可以堆叠同形状的tensors,而且可以容纳不同shape的tensor,是一个tensor容器!但是本人在使用过程中出现了以下 low-level 错误,请读者谨防:

    d = []
    d.append(a), d.append(b)
    print(d)

    e = a.append(b)
    print(e)  # 空的!

Output:

[[tensor([[0.7000, 0.3000],
        [0.2000, 0.8000]]), tensor([[0.5000, 0.9000],
        [0.5000, 0.5000]])], tensor([[0.1000, 0.9000],
        [0.3000, 0.7000]])]
None

list_x.append 过程中不会返回新的东西,只能从list_x中获取。
完结,撒花。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

torch.tensor拼接与list(tensors) 的相关文章

随机推荐

  • 向量点乘叉乘等理解和应用

    https baike baidu com item E5 90 91 E9 87 8F 1396519 fr aladdin 1 标量和矢量 2 1 2 3 2 4 6 2 4 6 2 1 2 3 2 矢量和矢量的加减 三角形定则解决向量
  • 程序员3年5年10年三个阶段

    第一阶段 三年 三年对于程序员来说是第一个门槛 这个阶段将会淘汰掉一批不适合写代码的人 这一阶段 我们走出校园 迈入社会 成为一名程序员 正式从书本上的内容迈向真正的企业级开发 我们知道如何团队协作 如何使用项目管理工具 项目版本如何控制
  • 奇偶剪枝算法

    奇偶剪枝是数据结构的搜索中 剪枝的一种特殊小技巧 现假设起点为 sx sy 终点为 ex ey 给定t步恰好走到终点 如图所示 竖走 横走 转弯 易证abs ex sx abs ey sy 为此问题类中任意情况下 起点到终点的最短步数 记做
  • 弱网使用教程

    Network Emulation for Windows Toolkit 1 下载安装包 默认安装 下载地址 https drive google com file d 1jvviwEDRx2UtmpUxe1 Sy94E3wBao5Ot
  • 基于51单片机的红外解码器

    1 简介 本红外解码器是以MCS 51系列AT89C512片机为核心 将红外传感器接收的信号解析出来 LCD1602显示屏将解码数据显示出来 2 总体原理图 硬件组成 单片机最小系统 LCD1602显示屏 IR红外接收器 系统电源 3 程序
  • 数据结构---n皇后问题

    n皇后问题 题目描述 JAVA实现 力扣提交代码 n皇后问题 题目描述 对于四皇后问题的解 放置一个皇后 棋盘被占据的解为 很明显 每行只能放置 且只能放置一个皇后 代码中 queen row 1 来实现的 一个完整的示例 放第一个皇后 放
  • 抖音将会输给快手?时间会证明一切

    为什么快手产品的主界面上没有设置频道分类 这样带来的用户体验真的好吗 在快手一个月之前的员工大会上 入职不久的新员工赵波提出了这个疑问 这个问题不只是他一个人的 之前官方的解答是 不意给用户设置标签是为了保持界面简洁 不对内容做过多的评判
  • i.MX6ULL - 从零开始移植uboot-imx_v2020.04_5.4.70_2.3.0

    i MX6ULL 从零开始移植uboot imx v2020 04 5 4 70 2 3 0 目录 i MX6ULL 从零开始移植uboot imx v2020 04 5 4 70 2 3 0 前言 1 环境搭建 2 NXP官方原版UBOO
  • 一文解决VS Code安装、C++环境配置、OpenCV配置

    前言 本文包括VScode安装 C 环境配置以及OpenCV配置全过程 VS Studio配置OpenCV比较简单 可以直接使用OpenCV官网已有的用VS Studio编译器编译好的OpenCV库 但VS Code不能直接利用VS Stu
  • Android:基本程序单元 Activity

    Activity 概述 在 Android 应用中 提供了 4 大基本组件 分别是 Activity Service BroadcastReceiver 和 ContentProvider 而 Activity 是 Android 应用最常
  • QApplication与QCoreApplication

    QApplication GUI 程序中 有且仅有一个 QApplication 类 管理GUI程序的控制流和主设置 QApplication 包含主事件循环 所有来自窗口系统和其他源的事件将被处理和分配 它也处理程序的初始化 析构和提供会
  • **vue.esm.js?efeb:591 [Vue warn]: Invalid prop: type check failed for prop "data". Expected Array

    vue esm js efeb 591 Vue warn Invalid prop type check failed for prop data Expected Array got String 有可能是这几种情况
  • CyclicBarrier底层源码解析

    一 概述 前面我们讲解了ReentrantLock CountDownLatch Semaphore的源码 他们都是由AQS来实现的 而CyclicBarrier则是通过ReentrantLock Condition实现的 CyclicBa
  • 达夫设备简单介绍

    前言 想到肯哥每天的Open话题 总能学到一些知识 怕忘记 所以我就当成博客记录一下了 今天要记录的是2023年6月5日 肯哥的技术交流群里面的一个代码 肯哥话题 肯哥的原话 hello 又到了每天的open话题时刻 今天我们聊点技术的东西
  • MATLAB学习——Matlab系统环境介绍

    本篇文章并不涉及Matlab的具体使用方法和相关函数 仅仅是和大家一起熟悉Matlab的操作界面 祝大家小年快乐 记得吃糖瓜 总体来说 Matlab的使用界面和office的使用界面具有很高的相似性 因此 对于要熟悉Matlab使用的初学者
  • JVM内存分配机制

    学习了JVM的内存分配机制为大家分享一下 现在把学习笔记总结记录一下 如果记录有些错误 还望指出 一 对象的创建 对象创建的主要流程 1 类加载检查 虚拟机遇到一条new指令时 首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引
  • 【 OpenCV】——图像缩放

    OpenCV 图像缩放 前言 本文介绍了图像放大 图像放小基础内容 使用步骤 1 引入库 include
  • 第五章 运输层 ---概述,端口号,复用,分用

    第五章 运输层 概述 端口号 复用 分用 5 1 运输层概述 作用范围与简介 总结 5 2 运输层端口号 复用 分用的概念 运输层端口号 发送方的复用与接收方的分用 TCP IP体系的应用层常用协议所使用的运输层熟知端口号 5 1 运输层概
  • python 定时器

    1 BlockingScheduler库 缺点 会阻塞代码 优点 调用定时函数时方便灵活定义定时 比如间隔多长时间调用一次 比如那几个月调用一次 代码 from apscheduler schedulers blocking import
  • torch.tensor拼接与list(tensors)

    tensor list tensors Construct list tensors To stack list tensors To concatenate list tensors Construct list tensors 创建一个