向量、矩阵、张量-通俗理解

本文介绍了张量的维数概念,区分了0维(标量)、1维(向量)和2维及以上(矩阵)张量,强调了数学中的向量和张量形状的区别,指出维度由左中括号数量决定,形状由各层元素数量构成。

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

首先,张量的维数等价于张量的阶数。

0维的张量就是标量,1维的张量就是向量,2维的张量就是矩阵,大于等于3维的张量没有名称,统一叫做张量。下面举例:

标量:很简单,就是一个数,1,2,5,108等等

向量:[1,2],[1,2,3],[1,2,3,4],[3,5,67,·······,n]都是向量

矩阵:[[1,3],[3,5]],[[1,2,3],[2,3,4],[3,4,5]],[[4,5,6,7,8],[3,4,7,8,9],[2,11,34,56,18]]是矩阵

3维张量:[[[1,2],[3,4]],[[1,2],[3,4]]]

综上其实可以有统一的说法:

0维张量:叫做标量

1维张量:就叫向量,[1,2] 形状为(2),可以叫做 (2)向量,不好听,那就叫2维向量

2维张量:就叫矩阵,[[1,3],[3,5]] 形状为(2x2),可以叫做2x2矩阵

3维张量:3维张量 [[[1,2],[3,4]],[[1,2],[3,4]]] 形状为(1x2x2),可以叫做1x2x2张量

解释:

但是混淆的地方来了,就是数学里面会使用3维向量,n维向量的说法,这其实指的是1维张量(即向量)的形状,即它所含分量的个数,比如[1,3]这个向量的维数为2,它有1和3这两个分量;[1,2,3,······,4096]这个向量的维数为4096,它有1、2······4096这4096个分量,都是说的向量的形状。你不能说[1,3]这个“张量”的维数是2,只能说[1,3]这个“1维张量”的维数是2。

矩阵也是类似,常常说的n×m阶矩阵,这里的阶也是指的矩阵的形状。

那么,张量的维数和张量的形状怎么看呢?

维度要看张量的最左边有多少个左中括号,有n个,则这个张量就是n维张量

[[1,3],[3,5]]最左边有两个左中括号,它就2维张量;[[[1,2],[3,4]],[[1,2],[3,4]]]最左边有三个左中括号,它就3维张量

形状的第一个元素要看张量最左边的中括号中有几个元素,形状的第二个元素要看张量中最左边的第二个中括号中有几个被逗号隔开的元素,形状的第3,4…n个元素以此类推

[[1,3],[3,5]]的最左边中括号有[1,3]和[3,5]这两个元素,最左边的第二个中括号里有1和3这两个元素,所以形状为[2,2];[[[1,2],[3,4]],[[1,2],[3,4]]]的最左边中括号有[[1,2],[3,4]]和[[1,2],[3,4]]这两个元素,最左边的第二个中括号里有[1,2]和[3,4]这两个元素,最左边的第三个中括号里有1和2这两个元素,所以形状为[2,2,2]

在形状的中括号中有多少个数字,就代表这个张量是多少维的张量。

参考文档:张量、矩阵和向量区别_张量和向量的区别-优快云博客

### 关于深度学习中的张量概念 #### 张量的基础理解 在深度学习领域,张量是一个多维数组的概念,在PyTorch中被广泛用于表示数据。张量可以视为向量矩阵的泛化形式,支持任意维度的数据结构[^1]。 #### 创建与初始化张量 通过`torch.Tensor()`可以直接创建一个张量对象;而利用诸如`torch.zeros()`, `torch.ones()`, 或者从已有数据构建新张量的方法如`torch.tensor(data)`则提供了更多灵活性来满足不同场景下的需求[^2]。 #### 基本运算操作 对于张量而言,加减乘除等基本算术运算是非常直观且易于实现的。例如两个相同形状大小的张量相加只需简单地使用加号即可完成相应位置元素间的求和过程。此外还有许多高级函数可用于执行更复杂的线性代数计算,比如矩阵乘法(`@`)、转置(T属性)等功能[^3]。 ```python import torch # 创建全零张量 zeros_tensor = torch.zeros((2, 3)) print(zeros_tensor) # 使用现有列表创建张量 data = [[1., 2.], [3., 4.]] custom_tensor = torch.tensor(data) print(custom_tensor) # 对两个张量做加法 tensor_a = torch.rand((2, 2)) tensor_b = torch.rand((2, 2)) summed_tensors = tensor_a + tensor_b print(summed_tensors) ``` #### 应用实例:简单的前馈神经网络 为了更好地理解如何应用这些基础知识点,这里给出一段基于PyTorch框架编写的一个极其简化版本的前馈神经网络代码片段作为示范: ```python class SimpleNN(torch.nn.Module): def __init__(self): super(SimpleNN, self).__init__() self.linear_layer = torch.nn.Linear(in_features=784, out_features=10) def forward(self, x): y_pred = self.linear_layer(x.view(-1, 784)) # 将输入展平成一维向量再传递给线性层处理 return y_pred model = SimpleNN() input_data = torch.randn(batch_size, 28*28) # 模拟MNIST图像尺寸为28x28像素点灰度图的情况 output_result = model(input_data) print(output_result.size()) ``` 上述代码展示了怎样定义一个继承自`nn.Module`类的新模型,并实现了其核心方法之一——`forward`函数。在这个过程中可以看到张量是如何贯穿整个流程并参与各种变换操作之中去影响最终预测结果的质量[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

AIScholar_lrm

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

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

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

打赏作者

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

抵扣说明:

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

余额充值