torch.sparse_csc_tensor

torch.sparse_csc_tensor

  • CSC格式构建一个稀疏张量。CSC格式的稀疏张量乘法运算通常比 COO 格式的稀疏张量更快。
    • CSC格式(Compressed Sparse Column Format)是一种存储稀疏矩阵的常用格式,它通过三个数组来表示稀疏矩阵:
      非零元素数组(values):矩阵中的非零值,按列优先顺序排列。
      行索引数组(row_indices):矩阵中非零值所在的索引
      列指针数组(ccol_indices):每第一个非零值在values中的索引。最后一个元素是非零值的总个数。
      假设我们有一个5x5的稀疏矩阵A,如下所示:
      [ 0 0 1 0 0 2 0 0 3 0 0 4 0 0 0 0 0 0 0 5 6 0 7 0 0 ] \begin{bmatrix} 0 & 0 & 1 & 0 & 0 \\ 2 & 0 & 0 & 3 & 0 \\ 0 & 4 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 5 \\ 6 & 0 & 7 & 0 & 0 \\ \end{bmatrix} 0200600400100070300000050
      ​CSR格式数据为:
      values = [2, 6, 4, 1, 7, 3, 5]
      row_indices= [1, 4, 2, 0, 4, 1, 3]
      ccol_indices= [0, 2, 3, 5, 6, 7]
      • 解释:
        values = [2, 6, 4, 1, 7, 3, 5]
        列优先顺序存储所有非零元素的值,顺序与行索引数组row_indices对应。
        row_indices= [1, 4, 2, 0, 4, 1, 3]
        第1列的第1个非零元素是2,行下标为1,所以第1个元素是1;(下标从0开始,,故“第0行”实际上是第一行)
        第1列的第2个非零元素是6,行下标为4,所以第2个元素是4
        第2列的第1个非零元素是4,行下标为2,所以第3个元素是2
        第3列的第1个非零元素是1,行下标为0,所以第4个元素是0
        第3列的第2个非零元素是7,行下标为4,所以第5个元素是4
        第4列的第1个非零元素是3,行下标为1,所以第6个元素是1
        第5列的第1个非零元素是5,行下标为3,所以第7个元素是3
        ccol_indices= [0, 2, 3, 5, 6, 7]
        第1列的第一个非零元素2,在values中的下标是0,所以这里是0;
        第2列的第一个非零元素4,在values中的下标是2,所以这里是2;
        第3列的第一个非零元素1,在values中的下标是3,所以这里是3;
        第4列的第一个非零元素3,在values中的下标是5,所以这里是5;
        第5列的第一个非零元素5,在values中的下标是6,所以这里是6;
        共有7个非零元素[2, 6, 4, 1, 7, 3, 5],故最后一个数是7

torch.sparse_csc_tensor(ccol_indices, row_indices, values, size=None, *, dtype=None, device=None, pin_memory=False, requires_grad=False, check_invariants=None)Tensor

参数

  • ccol_indices (array_like) - (B+1) 维数组 (*batchsize, ncols + 1) 的每个批次的最后一个元素是非零的数量。每列第一个非零值在values中的索引。最后一个元素是非零值的总个数。相邻数字的差值,表示给定列中元素的数量。
  • row_indices (array_like) – values数组中每个元素的行坐标。长度与 values 相同。
  • values (array_list) – 张量的初始值。可以是列表、元组、NumPy ndarray、标量和其他类型
  • size (list, tuple, torch.Size, optional) – 稀疏张量的大小: (*batchsize, nrows, ncols, *densesize) .如果未提供,则大小将被推断为足够大的最小大小,以容纳所有非零元素。

关键字参数

  • dtype(torch.dtype,可选) – 返回张量的所需数据类型。默认值:如果为 None,则从值推断数据类型。
  • device (torch.device,可选) – 返回的张量的所需设备。默认值:如果为 None,则使用当前设备作为默认张量类型(请参阅 torch.set_default_device() )。device 将是 CPU 张量类型的 CPU,CUDA 张量类型的当前 CUDA 设备。
  • pin_memory (bool,可选) – 如果设置,则返回的张量将在固定内存中分配。仅适用于 CPU 张量。默认值:False。可以使用 .to(‘cuda’) 方法将数据从固定内存移动到 GPU,通常比从常规内存移动到 GPU 更快。
  • requires_grad (bool, 可选) – 如果 autograd 应记录对返回的张量的操作。默认值:False。
  • check_invariants (bool, 可选) – 是否选中稀疏张量不变性。默认值:False(由 torch.sparse.check_sparse_tensor_invariants.is_enabled() 得到)
    • 不变性检查是一种验证机制,用于确保稀疏张量的数据结构和逻辑是正确的。如:压缩稀疏行(CSR)格式中的一个不变性条件,即crow_indices数组的最后一个元素必须等于非零元素的数量(nnz)。

示例代码

import torch
values = [2, 6, 4, 1, 7, 3, 5]
row_indices= [1, 4, 2, 0, 4, 1, 3]
ccol_indices= [0, 2, 3, 5, 6, 7]
x = torch.sparse_csc_tensor(torch.tensor(ccol_indices, dtype=torch.int64),torch.tensor(row_indices, dtype=torch.int64),torch.tensor(values), dtype=torch.double)# 打印稀疏张量x
print(f'x=\n{x}')# 将稀疏张量x转换为稠密矩阵形式并打印
print(f'x的稠密矩阵形式=\n{x.to_dense()}')
'''output
x=
tensor(ccol_indices=tensor([0, 2, 3, 5, 6, 7]),row_indices=tensor([1, 4, 2, 0, 4, 1, 3]),values=tensor([2., 6., 4., 1., 7., 3., 5.]), size=(5, 5), nnz=7,dtype=torch.float64, layout=torch.sparse_csc)
x的稠密矩阵形式=
tensor([[0., 0., 1., 0., 0.],[2., 0., 0., 3., 0.],[0., 4., 0., 0., 0.],[0., 0., 0., 0., 5.],[6., 0., 7., 0., 0.]], dtype=torch.float64)
'''

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ 设计模式:原型模式(Prototype Pattern)

链接:C 设计模式 链接:C 设计模式 - 工厂方法 链接:C 设计模式 - 抽象工厂 链接:C 设计模式 - 建造者模式 原型模式(Prototype Pattern)是一种创建型设计模式,它允许一个对象通过复制现有对象来…

C语言中的贪心算法

贪心算法(Greedy Algorithm)是一种在每一步选择中都采取当前最优解的算法,希望通过局部最优解的选择,最终得到全局最优解。它常用于解决最优化问题,如最小生成树、最短路径等。本文将从理论到实践,逐步引导…

区块链:概念与应用场景

一、区块链的定义 区块链是一种分布式账本技术,它以去中心化的方式存储数据,通过密码学保证数据的安全性和不可篡改性。 (一)分布式账本 账本结构:区块链可以看作是一个由多个节点共同维护的账本。这个账本是由一系列…

[数据集][图像分类]常见鱼类分类数据集2w张8类别

数据集类型:图像分类用,不可用于目标检测无标注文件 数据集格式:仅仅包含jpg图片,每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数):7554(剩余1w多为测试集) 分类类别数:…

uniapp开发小程序内嵌h5页面,video视频两边有细小黑色边框

1.问题如图 2.原因分析 是否为设置上述属性呢? 设置了,但是仍然有黑边。经过选中页面元素分析后,判断video元素本身就有这种特点,就是视频资源无法完全铺满元素容器。 3.解决方案

pod生命周期和pod的优雅终止

pod优雅终止 概念:当一个pod需要被终止时,系统会给予一定的时间窗口让pod内的应用程序完成正在处理的任务并安全地关闭,而不是立即强制终止。这样可以避免因突然终止而导致的数据丢失或服务中断 1. 发送终止信号: 当一个 pod 被…

Android 13 Launcher3 移除桌面抽屉入口

com.android.launcher3.taskbar.TaskbarView.updateHotseatItems // 移除任务栏抽屉入口 // if (mAllAppsButton != null) { // int index = Utilities.isRtl(getResources()) ? 0 : getChildCount(); // addView(mAllAppsButton, index)…

深度学习任务中的 `ulimit` 设置优化指南

深度学习任务中的 ulimit 设置优化指南 1. 什么是 ulimit?2. 深度学习任务中的关键 ulimit 设置2.1 max locked memory(-l)2.2 open files(-n)2.3 core file size(-c)2.4 stack size&#xff08…

【SpringMVC】SpringMVC 快速入门

通常,Web 应用的工作流程如下: 用户通过浏览器访问前端页面; 前端页面通过异步请求向后端服务器发送数据; 后端采用“表现层-业务层-数据层”三层架构进行开发: 表现层接收页面请求将请求参数传递给业务层业务层访问…

OpenGL变换矩阵和输入控制

在前面的文章当中我们已经成功播放了动画,让我们的角色动了起来,这一切变得比较有意思了起来。不过我们发现,角色虽然说是动了起来,不过只是在不停地原地踏步而已,而且我们也没有办法通过键盘来控制这个角色来进行移动…

【Spring MVC 核心机制】核心组件和工作流程解析

在 Web 应用开发中,处理用户请求的逻辑常常会涉及到路径匹配、请求分发、视图渲染等多个环节。Spring MVC 作为一款强大的 Web 框架,将这些复杂的操作高度抽象化,通过组件协作简化了开发者的工作。 无论是处理表单请求、生成动态页面&#x…

Verilog 过程赋值

关键词:阻塞赋值,非阻塞赋值,并行 过程性赋值是在 initial 或 always 语句块里的赋值,赋值对象是寄存器、整数、实数等类型。 这些变量在被赋值后,其值将保持不变,直到重新被赋予新值。 连续性赋值总是处…

[并发与并行] python如何构建并发管道处理多阶段任务?

文章目录 1. 背景&目标2. show me the code3.知识点4. 总结 1. 背景&目标 背景:一个任务可分为多个阶段(各个阶段非CPU密集型任务,而是属于IO密集型任务),希望每个阶段能够交给各自的线程去执行。 目标:构建支持多并发的…

07 基于OpenAMP的核间通信方案

引言 ZYNQ7020有两个CPU核心,这两个核心可以采用SMP或AMP方式进行调度,当采用AMP方式进行调度时核0和核1可以运行不同的操作系统,如核0运行Linux系统,提供有些复杂的用户交互工作,核1运行实时操作系统,对设…

7.若依参数设置、通知公告、日志管理

参数设置 对系统中的参数进行动态维护。 关闭验证码校验功能 打开页面注册功能 需要修改前端页面代码 通知公告 促进组织内部信息传递 若依只提供了一个半成品,只实现了管理员可以添加通知公告。 日志管理 追踪用户行为和系统运行状况。 登录日志 和操作日志…

深度学习领域车辆识别与跟踪

深度学习中车辆识别是一个广泛应用的领域,它涵盖了从车辆检测到车型识别的多个方面。以下是对深度学习中车辆识别与车辆相关内容的详细探讨: 一、车辆检测 车辆检测是车辆识别中的基础任务,其目标是在图像或视频中准确地定位出车辆的位置。…

SOME/IP 协议详解——远程过程调用(RPC)

文章目录 1. 传输协议绑定1.1 UDP 绑定1.2 TCP 绑定1.3 多服务实例1.4 通过 UDP 传输大型 SOME/IP 消息(SOME/IP - TP) 2. 请求 / 响应通信2.1 客户端请求消息构造2.2 服务器响应消息构建2.3 请求 / 响应交互规则 3. Fire&Forget 通信3.1 消息构造特…

苏宁易购商品详情API:解锁电商数据新维度

引言 在数字化时代,电商平台的API接口成为了开发者获取商品信息的重要渠道。苏宁易购,作为中国领先的电商平台之一,提供了丰富的API接口供开发者使用。本文将详细介绍苏宁易购商品详情API的使用方法,并提供示例代码,帮…

基于Docker+模拟器的Appium自动化测试(二)

模拟器的设置 打开“夜神模拟器”的系统设置,切换到“手机与网络”页,选中网络设置下的“开启网络连接”和“开启网络桥接模式”复选框,而后选择“静态IP”单选框,在IP地址中输入“192.168.0.105”,网关等内容不再赘述…

大数据技术-Hadoop(三)Mapreduce的介绍与使用

目录 一、概念和定义 二、WordCount案例 1、WordCountMapper 2、WordCountReducer 3、WordCountDriver 三、序列化 1、为什么序列化 2、为什么不用Java的序列化 3、Hadoop序列化特点: 4、自定义bean对象实现序列化接口(Writable) 4…