什么是张量,pytorch为啥不复用numpy中的多维数组,非要自己搞一个

举报
林欣 发表于 2023/07/26 16:34:05 2023/07/26
【摘要】 定义PyTorch 和 NumPy 都是用于科学计算和数据处理的库,但它们的设计和用途略有不同。NumPy 是一个用于数值计算的库,它提供了一个强大的数组对象。ndarray,可以方便地进行数组操作、线性代数运算和数学函数计算等。而 PyTorch 是一个用于深度学习的库,它提供了一个称为张量(Tensor)的对象,可以方便地进行矩阵运算、向量运算和神经网络的前向和反向传播等。 区别虽然 ...

定义

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}')

image.png

总结

综上所述,PyTorch 的张量和 NumPy 的 ndarray 虽然都是多维数组,但它们在内存管理和计算方式上略有不同,因此 PyTorch 选择了自己实现张量。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。