什么是张量,pytorch为啥不复用numpy中的多维数组,非要自己搞一个
定义
PyTorch 和 NumPy 都是用于科学计算和数据处理的库,但它们的设计和用途略有不同。
NumPy 是一个用于数值计算的库,它提供了一个强大的数组对象。ndarray,可以方便地进行数组操作、线性代数运算和数学函数计算等。而 PyTorch 是一个用于深度学习的库,它提供了一个称为张量(Tensor)的对象,可以方便地进行矩阵运算、向量运算和神经网络的前向和反向传播等。
区别
虽然 PyTorch 的张量和 NumPy 的 ndarray 都是多维数组,但它们在内存管理和计算方式上略有不同。NumPy 的 ndarray 是基于 C 语言编写的,它的内存管理是由操作系统负责的,因此数组的大小和形状在创建后不能更改。而 PyTorch 的张量是基于 Python 语言编写的,它的内存管理是由 PyTorch 自身负责的,因此可以在运行时动态地更改数组的大小和形状。这种灵活性在深度学习中非常重要,因为神经网络的输入和输出往往是不同的大小和形状。
此外,PyTorch 的张量还支持 GPU 运算和自动微分。在深度学习中,很多计算都是在 GPU 上进行的,因此 PyTorch 的张量可以在 GPU 上进行矩阵运算和向量运算,从而提高计算效率。另外,自动微分是深度学习中的一个重要功能,它可以自动计算神经网络中每个参数的梯度,从而加快神经网络的训练速度。PyTorch 的张量支持自动微分,因此可以在训练神经网络时自动计算梯度,从而提高训练效率。
打印pytorch张量
张量的主要属性有以下3个
- 张量的维度(rank,number of dimensions)指的是张量中用来索引元素的索引个数,0维张量就是标量,因为不需要索引,而对于向量(vector)而言,只需要一个索引就可以得到相应元素,后续同理。高维的张量其实就是对低维张量的堆叠。
- 张量的形状(shape,number of rows and columns)指的是张量中每一维度的大小A
- 张量的类型(type,data type of tensor’s elements)指的是张量中每个元素的数据类型
测试代码如下
import torch
a = torch.ones(3,4,5, dtype=torch.int32)
# 张量的维度(rank,number of dimensions)指的是张量中用来索引元素的索引个数,0维张量就是标量,因为不需要索引,而对于向量(vector)而言,只需要一个索引就可以得到相应元素,后续同理。高维的张量其实就是对低维张量的堆叠。
print(f'ndimension:{a.ndimension()}')
# 张量的形状(shape,number of rows and columns)指的是张量中每一维度的大小A
print(f'shape:{a.shape}')
# 张量的类型(type,data type of tensor's elements)指的是张量中每个元素的数据类型
print(f'dtype:{a.dtype}')
总结
综上所述,PyTorch 的张量和 NumPy 的 ndarray 虽然都是多维数组,但它们在内存管理和计算方式上略有不同,因此 PyTorch 选择了自己实现张量。
- 点赞
- 收藏
- 关注作者
评论(0)