Tensor张量的属性dim、type、size、shape、numel的使用方法介绍

本文介绍了PyTorch中Tensor张量的几个关键属性,包括dim用于获取张量维度,type显示张量类型,size和shape提供张量形状信息,以及numel返回张量元素数量。内容涵盖张量的基本操作,为深度学习和机器学习的实践者提供参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文重点

Tensor张量有一些常用的属性,我们可以通过这些基本的属性判断张量的类型,维度,以及元素个数,本节课程我们将对tensor属性进行简单的介绍。

代码

import torch
import numpy as np
a=torch.Tensor(2,3,4)
print(a)
print(a.dim())
print(a.type())
print(a.size())
print(a.shape)
print(a.numel())

常用的属性和方法有:

dim:输出张量的维度

type:张量的类型

size、shape:张量的形状

numel:张量中元素的个数

注意:在后面的很多pytorch的方法中会有很多关于tensor的操作需要指定操作的维度,此时会有一个参数dim,注意dim是从0开始的。

这个程度是干什么的,我们暂时不需要知道,后面会介绍,现在我们只需要知道dim从0开始就ok了

``` std::vector<int> shape_; std::vector<size_t> strides_; int Tensor::numel() const{ int value = shape_.empty() ? 0 : 1; for(int i = 0; i < shape_.size(); ++i){ value *= shape_[i]; } return value; } Tensor& Tensor::compute_shape_string(){ // clean string shape_string_[0] = 0; char* buffer = shape_string_; size_t buffer_size = sizeof(shape_string_); for(int i = 0; i < shape_.size(); ++i){ int size = 0; if(i < shape_.size() - 1) size = snprintf(buffer, buffer_size, "%d x ", shape_[i]); else size = snprintf(buffer, buffer_size, "%d", shape_[i]); buffer += size; buffer_size -= size; } return *this; } Tensor& Tensor::adajust_memory_by_update_dims_or_type(){ int needed_size = this->numel() * element_size(); if(needed_size > this->bytes_){ head_ = DataHead::Init; } this->bytes_ = needed_size; return *this; } Tensor& Tensor::resize(int ndims, const int* dims) { vector<int> setup_dims(ndims); for(int i = 0; i < ndims; ++i){ int dim = dims[i]; if(dim == -1){ Assert(ndims == shape_.size()); dim = shape_[i]; } setup_dims[i] = dim; } this->shape_ = setup_dims; // strides = element_size this->strides_.resize(setup_dims.size()); size_t prev_size = element_size(); size_t prev_shape = 1; for(int i = (int)strides_.size() - 1; i >= 0; --i){ if(i + 1 < strides_.size()){ prev_size = strides_[i+1]; prev_shape = shape_[i+1]; } strides_[i] = prev_size * prev_shape; } this->adajust_memory_by_update_dims_or_type(); this->compute_shape_string(); return *this; }```详细一些,解释一下,每一行代码什么意思,具体一点
最新发布
03-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每天五分钟玩转人工智能

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值