PyTorch:快速了解Tensor的连续性

目录

1、引言

2、底层数据的存储

3、按行优先一维展开


1、引言

Tensor的连续性是指其底层一维数组元素的存储顺序与按行优先一维展开的元素顺序是否一致。

2、底层数据的存储

  Tensor的底层数据在内存上是连续存储的,通过代码说明如下:

用到的python函数与方法

x.data_ptr() #该函数返回Tensor数据的实际内存的起始地址
id(x) #该函数返回x在python内存管理系统中的唯一标识符

初始化2×3的tensor,使用data_ptr()方法把每一个元素的实际内存输出到列表中,由于元素是int64,int64占用8个字节(64位),连续存储地址间隔为8。

x=torch.tensor([[1,2,3],[4,5,6]])
print(x)
tensor([[1, 2, 3],
        [4, 5, 6]])
print([i.data_ptr() for i in x.flatten()])
[1497599557248, 1497599557256, 1497599557264, 1497599557272, 1497599557280, 1497599557288]

这些地址间隔为8,说明元素连续存储。

3、按行优先一维展开

通过x转置得到新Tensor变量y

y=x.T
print(y)
tensor([[1, 4],
        [2, 5],
        [3, 6]])

通过.storage()查看底层数据,通过.flatten()按行优先一维展开,通过.is_contiguous()判断是否连续

下面测试中:

        1、x按行优先一维展开的数据视图与底层数据顺序一致,x是连续的

        2、y按行优先一维展开的数据视图与底层数据顺序不一致,y不是连续的

        3、x与y共用同一底层数据,起始地址都是1497599557248

        4、x与y两个id()不同

总结:

        1和2证实连续性判定的;

        3和4说明x与y是不同的Tensor,但是共用相同的底层数据,进一步体现了Tensor的内部结构。

print(x.flatten())
print(x.storage())
print(id(x))
print(x.data_ptr())
print(x.is_contiguous())
tensor([1, 2, 3, 4, 5, 6])
 1
 2
 3
 4
 5
 6
[torch.storage._TypedStorage(dtype=torch.int64, device=cpu) of size 6]
1497563980128
1497599557248
True
print(y.flatten())
print(y.storage())
print(id(y))
print(y.data_ptr())
print(y.is_contiguous())
tensor([1, 4, 2, 5, 3, 6])
 1
 2
 3
 4
 5
 6
[torch.storage._TypedStorage(dtype=torch.int64, device=cpu) of size 6]
1497671954928
1497599557248
False
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值