一文搞懂!Python中的shape[-1]、shape[0]、shape[1]、shape[2]是指什么?

本文解释了在Python的深度学习中,张量的shape属性如何表示不同维度的大小,包括向量的长度、矩阵的行数和列数以及图片的高宽和通道数。作者通过实例演示了shape[0],shape[1],shape[2],shape[-1]的具体含义。
摘要由CSDN通过智能技术生成

在这里插入图片描述

初学深度学习,在很多代码中都能见到shape[0],那么在python中,shape[-1]、shape[0]、shape[1]、shape[2]都是指什么呢?让本文来为你答疑解惑吧~

要谈python中的shape属性,必须要说Tensor:

Tensor 中文称为 张量(可以看做是一个多维数组),是 PyTorch 中最基本的数据类型。在数学中,标量是一个只有大小没有方向的量,如:1、2、3 等。向量是既有大小又有方向的量(一维数组),如 A = (x0, y0, z0)。矩阵是由多个向量组成的二维数组。

实际上,标量、向量和矩阵等都可以看做是张量的特例,标量是零维张量,向量是一维张量,矩阵是二维张量,图片(RGB)是三维张量

其实,对于n维张量来说,shape[i]就是指它的第 i 维的大小(0 <= i <= n-1 ),而shape[-1]就是指它最后一维的大小。

因此,在深度学习过程中最常处理的矩阵、图片都可以转化为Tensor进行处理,并且使用shape属性获取它们相应维度的大小,请看下例:

一、向量

import torch

#定义向量
x = torch.tensor([2, 3, 4, 5])
#第0维度是向量的长度
print("我是向量的第0维度大小:", x.shape[0])
print("我是向量的最后一维度大小:", x.shape[-1])
  • shape[0]反映第0维度的大小,是向量的长度
******输出******
我是向量的第0维度大小: 4
我是向量的最后一维度大小: 4

二、矩阵

#定义矩阵
y = torch.tensor([[2, 3, 4, 3, 6, 8],
                 [1, 8, 9, 5, 0, 1],
                 [2, 0, 2, 2, 7, 1]])
#第0维度是矩阵的行数
print("我是矩阵的第0维度大小:", y.shape[0])
#第1维度是矩阵的列数
print("我是矩阵的第1维度大小:", y.shape[1])
print("我是矩阵的最后一维度大小:", y.shape[-1])
  • shape[0]反映第0维度的大小,是矩阵的行数
  • shape[1]反映第1维度的大小,是矩阵的列数
******输出******
我是矩阵的第0维度大小: 3
我是矩阵的第1维度大小: 6
我是矩阵的最后一维度大小: 6

三、图片

#读取图片
import cv2

#修改为自己的图片地址
img = cv2.imread("C:/Users/86185/Desktop/1.png", 1)
#第0维度是图片的高度
print("我是图片的第0维度大小:", img.shape[0])
#第1维度是图片的宽度
print("我是图片的第1维度大小:", img.shape[1])
#第2维度是图片的通道数
print("我是图片的第2维度大小:", img.shape[1])
print("我是图片的最后一维度大小:", img.shape[-1])
  • shape[0]反映第0维度的大小,是图片的高度
  • shape[1]反映第1维度的大小,是图片的宽度
  • shape[2]反映第2维度的大小,是图片的通道数
******输出******
我是图片的第0维度大小: 274
我是图片的第1维度大小: 1089
我是图片的第2维度大小: 1089
我是图片的最后一维度大小: 3

写在后面

这个专栏主要是我在实现深度学习项目中总结的一些问题,以备未来笔试和面试之需,不过由于学习的不深入,也只是走马观花,很多问题总结得也不是很透彻,望读者见谅,如果有错误和不足之处,还望大家在评论区指出。希望能给大家的学习带来一点帮助,共同进步!!!

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Python面向对象编程(Object-Oriented Programming,简称OOP)是一种程序设计方法,它将数据和操作数据的方法组合成对象,通过定义类(class)来创建对象。下面是一些概念和原则,可以帮助你更好地理解Python面向对象编程。 1. 类和对象: - 类是一种抽象的数据类型,它定义了对象的属性和方法。 - 对象是类的实例,它具有类定义的属性和方法。 2. 属性和方法: - 属性是对象的数据,可以是整数、字符串、列表等。 - 方法是对象的行为,可以是函数或过程。 3. 封装: - 封装是将数据和对数据的操作封装在一起,以创建一个独立的实体。 - 使用类来封装数据和方法,可以隐藏实现细节,提高代码的可读性和可维护性。 4. 继承: - 继承是一种机制,允许一个类继承另一个类的属性和方法。 - 子类可以重用父类的代码,并且可以添加新的属性和方法。 5. 多态: - 多态是同一个方法可以在不同的类具有不同的实现方式。 - 多态可以提高代码的灵活性和可扩展性。 下面是一个简单的例子,展示了如何定义一个类、创建对象并调用对象的方法: ```python class Person: def __init__(self, name, age): self.name = name self.age = age def say_hello(self): print(f"Hello, my name is {self.name} and I'm {self.age} years old.") # 创建对象 person = Person("Alice", 25) # 调用对象的方法 person.say_hello() ``` 这个例子定义了一个名为`Person`的类,它有两个属性(`name`和`age`)和一个方法(`say_hello`)。我们通过`Person`类创建了一个名为`person`的对象,并调用了它的`say_hello`方法。 希望这个简单的例子能帮助你更好地理解Python面向对象编程。如果你有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值