昇思25天学习打卡营第2天 | 张量Tensor

张量Tensor

在这里插入图片描述

张量(Tensor)基础

张量是MindSpore中的基本数据结构的一种,类似于NumPy中数组和矩阵非常相似。它具有以下重要属性:

  • 形状(shape)和数据类型(dtype):每个张量都有确定的形状和数据类型,这决定了它在计算中的用途和行为。
  • 创建方法:可以通过直接传入数据、从NumPy数组生成、使用初始化器(如One、Normal)或者从其他张量继承属性来创建张量。
  • 索引和切片:类似于NumPy,张量支持方便的索引和切片操作,允许按需访问和操作数据元素。
  • 运算:支持各种张量之间的数学运算,如加减乘除、取模、整除等,操作与NumPy类似。
import numpy as np
import mindspore
from mindspore import ops
from mindspore import Tensor, CSRTensor, COOTensor

创建张量

张量的创建方式有多种,构造张量时,支持传入Tensor、float、int、bool、tuple、list和numpy.ndarray类型。

  • 根据数据直接生成
    可以根据数据创建张量,数据类型可以设置或者通过框架自动推断。

    data = [1, 0, 1, 0]
    x_data = Tensor(data)
    print(x_data, x_data.shape, x_data.dtype)
    

    代码执行结果:[1 0 1 0] (4,) Int64

  • 从NumPy数组生成
    可以从NumPy数组创建张量。

    np_array = np.array(data)
    x_np = Tensor(np_array)
    print(x_np, x_np.shape, x_np.dtype)
    

    [1 0 1 0] (4,) Int64

  • 使用init初始化器构造张量
    当使用init初始化器对张量进行初始化时,支持传入的参数有init、shape、dtype。

    • init: 支持传入initializer的子类。如:下方示例中的 One() 和 Normal()。
    • shape: 支持传入 list、tuple、 int。
    • dtype: 支持传入mindspore.dtype。
    from mindspore.common.initializer import One, Normal# Initialize a tensor with ones
    tensor1 = mindspore.Tensor(shape=(2, 2), dtype=mindspore.float32, init=One())
    # Initialize a tensor from normal distribution
    tensor2 = mindspore.Tensor(shape=(2, 2), dtype=mindspore.float32, init=Normal())print("tensor1:\n", tensor1)
    print("tensor2:\n", tensor2)
    

    tensor1:
    [[1. 1.]
    [1. 1.]]
    tensor2:
    [[-0.00063482 -0.00916224]
    [ 0.01324238 -0.0171206 ]]

  • 继承另一个张量的属性,形成新的张量

    from mindspore import opsx_ones = ops.ones_like(x_data)
    print(f"Ones Tensor: \n {x_ones} \n")x_zeros = ops.zeros_like(x_data)
    print(f"Zeros Tensor: \n {x_zeros} \n")
    

    Ones Tensor:
    [1 1 1 1]
    Zeros Tensor:
    [0 0 0 0]

张量的属性

张量的属性包括形状、数据类型、转置张量、单个元素大小、占用字节数量、维数、元素个数和每一维步长。

  • 形状(shape):Tensor的shape,是一个tuple。

  • 数据类型(dtype):Tensor的dtype,是MindSpore的一个数据类型。

  • 单个元素大小(itemsize): Tensor中每一个元素占用字节数,是一个整数。

  • 占用字节数量(nbytes): Tensor占用的总字节数,是一个整数。

  • 维数(ndim): Tensor的秩,也就是len(tensor.shape),是一个整数。

  • 元素个数(size): Tensor中所有元素的个数,是一个整数。

  • 每一维步长(strides): Tensor每一维所需要的字节数,是一个tuple。

x = Tensor(np.array([[1, 2], [3, 4]]), mindspore.int32)print("x_shape:", x.shape)
print("x_dtype:", x.dtype)
print("x_itemsize:", x.itemsize)
print("x_nbytes:", x.nbytes)
print("x_ndim:", x.ndim)
print("x_size:", x.size)
print("x_strides:", x.strides)

在这里插入图片描述

张量索引

Tensor索引与Numpy索引类似,索引从0开始编制,负索引表示按倒序编制,冒号:和 …用于对数据进行切片。

tensor = Tensor(np.array([[0, 1], [2, 3]]).astype(np.float32))print("First row: {}".format(tensor[0]))
print("value of bottom right corner: {}".format(tensor[1, 1]))
print("Last column: {}".format(tensor[:, -1]))
print("First column: {}".format(tensor[..., 0]))

First row: [0. 1.]
value of bottom right corner: 3.0
Last column: [1.3.]
First column: [0. 2.]

张量运算

张量之间有很多运算,包括算术、线性代数、矩阵处理(转置、标引、切片)、采样等,张量运算和NumPy的使用方式类似,下面介绍其中几种操作。

普通算术运算有:加(+)、减(-)、乘(*)、除(/)、取模(%)、整除(//)。

x = Tensor(np.array([1, 2, 3]), mindspore.float32)
y = Tensor(np.array([4, 5, 6]), mindspore.float32)
​
output_add = x + y
output_sub = x - y
output_mul = x * y
output_div = y / x
output_mod = y % x
output_floordiv = y // x
​
print("add:", output_add)
print("sub:", output_sub)
print("mul:", output_mul)
print("div:", output_div)
print("mod:", output_mod)
print("floordiv:", output_floordiv)

add: [5. 7. 9.]
sub: [-3. -3. -3.]
mul: [ 4. 10. 18.]
div: [4. 2.5 2.]
mod: [0. 1. 0.]
floordiv: [4. 2. 2.]

concat将给定维度上的一系列张量连接起来。

data1 = Tensor(np.array([[0, 1], [2, 3]]).astype(np.float32))
data2 = Tensor(np.array([[4, 5], [6, 7]]).astype(np.float32))
output = ops.concat((data1, data2), axis=0)print(output)
print("shape:\n", output.shape)

[[0. 1.] [2. 3.] [4. 5.] [6. 7.]] shape: (4, 2)

stack则是从另一个维度上将两个张量合并起来。

data1 = Tensor(np.array([[0, 1], [2, 3]]).astype(np.float32))
data2 = Tensor(np.array([[4, 5], [6, 7]]).astype(np.float32))
output = ops.stack([data1, data2])print(output)
print("shape:\n", output.shape)

[[[0. 1.] [2. 3.]]

[[4. 5.] [6. 7.]]] shape: (2, 2, 2)

Tensor与NumPy转换

Tensor可以和NumPy进行互相转换。

Tensor转换为NumPy
与张量创建相同,使用 Tensor.asnumpy() 将Tensor变量转换为NumPy变量。

t = Tensor([1., 1., 1., 1., 1.])
print(f"t: {t}", type(t))
n = t.asnumpy()
print(f"n: {n}", type(n))

t: [1. 1. 1. 1. 1.] <class ‘mindspore.common.tensor.Tensor’> n: [1. 1.

    1. 1.] <class ‘numpy.ndarray’>

NumPy转换为Tensor

使用Tensor()将NumPy变量转换为Tensor变量。

n = np.ones(5)
t = Tensor.from_numpy(n)
np.add(n, 1, out=n)
print(f"n: {n}", type(n))
print(f"t: {t}", type(t))

n: [2. 2. 2. 2. 2.] <class ‘numpy.ndarray’> t: [2. 2. 2. 2. 2.] <class
‘mindspore.common.tensor.Tensor’>

稀疏张量(Sparse Tensor)

稀疏张量是一种优化的数据结构,适用于大部分元素为零的情况,特别是在推荐系统、图神经网络等应用中有重要应用:

  • CSR稀疏张量:采用压缩稀疏行(CSR)格式存储数据,通过indptr、indices和values表示非零元素的位置和值。
  • COO稀疏张量:采用坐标格式(COO)存储数据,通过indices和values表示非零元素的位置和值,适合表示稀疏的多维数据。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

通过学习MindSpore中的张量和稀疏张量,我深入了解了如何有效地管理和操作大规模数据,以及如何利用稀疏数据结构来提升计算效率和节省存储空间。

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

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

相关文章

如何找到合适的Python第三方库?

找合适的Python库其实很简单&#xff0c;按照以下三步法&#xff0c;你能找到90%的Python库。 1、百度谷歌搜索 明确自己的需求&#xff0c;用Python来干什么&#xff0c;力求简短明了。比如定位“数据分析”&#xff0c;然后去搜索关键词【Python数据分析第三方库】&#xf…

基于 JWT 进行身份验证

一、JWT 介绍 JWT 本质上就是一组字串&#xff0c;通过&#xff08;.&#xff09;切分成三个为 Base64 编码的部分&#xff1a; Header : 描述 JWT 的元数据&#xff0c;定义了生成签名的算法以及 Token 的类型。Payload : 用来存放实际需要传递的数据Signature&#xff08;签…

考研数学|张宇和武忠祥,强化能不能同时跟?

可以说你跟武老师学明白了&#xff0c;120完全没问题&#xff01;如果追求更高&#xff0c;宇哥的怀抱也想你敞开&#xff01; 学长我21年一战数学83&#xff0c;总分没过线&#xff0c;22年二战143&#xff0c;逆袭上岸211&#xff01;市面上的老师我基本都听过&#xff0c;最…

微深节能 料场堆取料无人操作系统 格雷母线

格雷母线高精度位移检测系统在料场堆取料中的应用是一个重要的技术进步&#xff0c;它极大地提升了堆取料作业的自动化和精确性。 一、格雷母线定位系统概述 格雷母线高精度位移测量系统&#xff0c;包括格雷母线、天线箱、地址解码器、地址编码器四个部分组成。 格雷母线类似一…

Java养老护理助浴陪诊小程序APP源码

&#x1f496;护理助浴陪诊小程序&#x1f496; 一、引言&#xff1a;养老新趋势&#x1f331; 在快节奏的现代生活中&#xff0c;养老问题逐渐成为了社会关注的焦点。如何为老年人提供便捷、贴心的服务&#xff0c;让他们晚年生活更加安心、舒适&#xff0c;是我们每个人都需…

篮球联盟管理系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;球员管理&#xff0c;用户管理&#xff0c;球队管理&#xff0c;论坛管理&#xff0c;篮球资讯管理&#xff0c;基础数据管理 前台账户功能包括&#xff1a;系统首页&#xff0…

Transformer常见面试题

目录 1.Transformer为何使用多头注意力机制&#xff1f;&#xff08;为什么不使用一个头&#xff09; 2.Transformer为什么Q和K使用不同的权重矩阵生成&#xff0c;为何不能使用同一个值进行自身的点乘&#xff1f; &#xff08;注意和第一个问题的区别&#xff09; 3.Transf…

git提交新仓库代码,提示无权限,但用户名已修改

目录 1 用户名无权限 2 删除用户凭据 2.1 打开控制面板 2.2 找到“凭据管理器” 2.3 删除git历史 3 npm工具库添加git仓库指引 1 用户名无权限 之前因为时间的原因&#xff0c;js-tool-big-box工具库没有提交到github上去&#xff0c;今天想着往上提交一下&#xff0c;但…

Linux系统中根下的目录结构介绍

一、Linux的路径分隔符 Linux系统中使用正斜杠(/)作为路径分隔符&#xff1b;每个目录的后面都默认带有一个正斜杠&#xff08;如&#xff1a;需要进入opt目录可以分别使用【cd /opt】或【cd /opt/】&#xff09; 二、Linux根目录下各个目录结构介绍 红色标识的文件夹为Linux的…

“开源AI”到底是什么意思

开源与专有软件之间的斗争早已为人所熟知。然而&#xff0c;长期以来弥漫在软件圈的紧张关系已经渗透到了人工智能领域&#xff0c;部分原因在于没有人能在AI背景下就“开源”的真正含义达成一致。 相关阅读&#xff1a;GPT-4o通过整合文本、音频和视觉实现人性化的AI交互&…

PTP时间同步协议简介

注意&#xff0c;上图中 t1 t4 都是主机时间。 t2 t3 都是从机时间。 总延迟为 (t4 - t1) - (t3 - t2) 单边的平均延迟为 ((t4 - t1) - (t3 - t2) ) / 2&#xff0c;公式d1 两边的时钟偏差为 (((t3 t2) / 2)) - ((t4 t1) / 2) 也可以通过下面2个式子 t2 offset delay t1…

Orangepi Zero2 全志H616 的初识

目录 一、全志H616简介 1.1 为什么学&#xff1a; 1.2 学什么&#xff1a; 1.3 全志H616平台介绍&#xff1a; 二、刷机 系统启动和初始化配置 2.1 需要的工具&#xff1a; 2.2 工具安装&#xff1a; 2.3 刷机&#xff1a; 2.4 登录系统&#xff1a; 2.5 修改登录密码…

Prometheus:开源监控解决方案的力量

前言 在当今高度数字化和云原生应用的时代&#xff0c;监控系统是确保系统稳定性和性能的关键组成部分。而 Prometheus 作为一种开源的监控解决方案&#xff0c;正在成为越来越多企业和开发者的首选。本文将深入探讨 Prometheus 的特性、优势以及如何利用它来构建强大的监控系…

CLion2024 for Mac[po] C和C++的跨平台解代码编辑器

Mac分享吧 文章目录 效果一、下载软件二、开始安装1、双击运行软件&#xff08;适合自己的M芯片版或Intel芯片版&#xff09;&#xff0c;将其从左侧拖入右侧文件夹中&#xff0c;等待安装完毕2、应用程序显示软件图标&#xff0c;表示安装成功3、打开访达&#xff0c;点击【文…

Live Wallpaper Themes 4K Pro for Mac v19.9 超高清4K动态壁纸

Live Wallpaper & Themes 4K Pro for Mac v19.7 是一款专为Mac用户设计的超高清4K动态壁纸应用程序。它凭借出色的视觉效果和丰富的个性化设置&#xff0c;为用户带来全新的桌面体验。 这款软件提供了大量精美的动态壁纸供用户选择&#xff0c;涵盖了各种风格和主题&#…

2-16 基于matlab的动载荷简支梁模态分析程序

基于matlab的动载荷简支梁模态分析程序&#xff0c;可调节简支梁参数&#xff0c;包括截面宽、截面高、梁长度、截面惯性矩、弹性模量、密度。输出前四阶固有频率&#xff0c;任意时刻、位置的响应结果。程序已调通&#xff0c;可直接运行。 2-16 matlab 动载荷简支梁模态分析 …

原生js实现图片预览控件,支持丝滑拖拽,滚轮放缩,放缩聚焦

手撸源代码如下&#xff1a;注释应该很详细了&#xff0c;拿去直用 可以放到在线编辑器测试&#xff0c;记得修改图片路径 菜鸟教程在线编辑器 <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" conten…

机器学习--KNN算法

目录 一、实验目的 二、实验的软、硬件平台 三、实验内容概述 四、实验设计方案 五、实验内容 一、实验目的 通过本实验掌握kNN算法的原理&#xff0c;熟悉kNN算法。 二、实验的软、硬件平台 python 3.6.5 CourseGrading在线实验环境 三、实验内容概述 1.kNN算法简介…

Android开发系列(九)Jetpack Compose之ConstraintLayout

ConstraintLayout是一个用于构建复杂布局的组件。它通过将子视图限制在给定的约束条件下来定位和排列视图。 使用ConstraintLayout&#xff0c;您可以通过定义视图之间的约束关系来指定它们的位置。这些约束可以是水平和垂直的对齐、边距、宽度和高度等。这允许您创建灵活而响…

⭐最新版!SpringBoot正确集成PageHelper姿势,不再被误导!

GGBond&#x1f508; CSDN的朋友们大家好哇&#xff0c;我是新来的Java练习生 CodeCodeBond&#xff01; 什么是PageHelper&#xff1f; 这里给不知道的人儿说明一下~~ 知道的xdm可以跳过了&#xff01; PageHelper顾名思义是一个 页面 帮手。也就是分页查询的一个好用的工具…