pytorch和张量维度操作的一些方法

在深度学习中经常会用到一些方法来获取张量的维度数目,以及某一维度的具体大小,或者对张量的某些维度进行操作。下面介绍和张量维度相关的办法。

import torch

a = torch.randn(3, 4, 5)  #创建一个张量a

print(a.ndimension())  # 获取维度的数目

print(a.nelement())  # 获取张量的总元素数目

print(a.size())  # 获取该张量每个维度的大小,调用方法

print(a.shape)  # 获取该张量每个维度的大小,访问属性

print(a.size(0))  # 获取张量第0维度的大小

b = torch.randn(12)  # 创建一个长度为12的一维张量

print(b.view(3, 4))  # 向量改变为3*4的矩阵

print(b.view(-1, 3))  # 第一个维度为-1,pytorch会自动计算维度的具体值


# 通过以下三行代码的结果可以看出,view方法不改变底层数据,改变view后张量会改变原来的张量
print(b)
b.view(3,4)[0,0] = 1.0
print(b)

print(b.data_ptr())  # 获取张量的数据指针
print(b.view(3,4))
print(b.view(3, 4).data_ptr())  # 同上数据指针不改变
print(b.view(3, 4).contiguous())
print(b.view(3, 4).contiguous().data_ptr())  # 同上数据指针不改变
print(b.view(3, 4).transpose(0, 1))
print(b.view(3, 4).transpose(0, 1).data_ptr())  # 同上数据指针不改变
print(b.view(3, 4).transpose(0, 1).contiguous().data_ptr())  # 步长和维度不兼容,重新生成张量,指针改变

print(b.reshape(4, 3))  # 也可以使用reshape方法来改变张量的形状,比较简单

Done!!!

你可能感兴趣的:(pytorch,pytorch)