pytorch - storage(), stride()

1 storage()

pytorch 中的 一个tensor分为头信息区(Tensor)和存储区(Storage)

        头信息区保存着tensor的形状size,步长stride,数据类型type等信息;

        真正的数据保存成连续的数组,存储在存储区;

存在多个tensor都对应着相同一个存储区的情况,只是这几个tensor头信息区不同;

>>> import torch
>>> a = torch.arange(6)
>>> a
tensor([0, 1, 2, 3, 4, 5])
>>> a.storage()
 0
 1
 2
 3
 4
 5
[torch.LongStorage of size 6]
>>> b = a.view(2,3)
>>> b
tensor([[0, 1, 2],
        [3, 4, 5]])
>>> b.storage()
 0
 1
 2
 3
 4
 5
[torch.LongStorage of size 6]

a、b tensor的Storage都是一样的,而a、b  tensor只是因为它们的头信息区不同;

        一旦修改其中一个tensor的值。其它tensor也会跟着改变;

>>> a[3] = 10
>>> a
tensor([ 0,  1,  2, 10,  4,  5])
>>> b
tensor([[ 0,  1,  2],
        [10,  4,  5]])

2 stride()

        stride是在指定维度中从一个元素跳到下一个元素所必需的步长;

        当没有参数传入时,返回所有步长的元组;

        否则,将返回一个整数值作为特定维度dim中的步长;

>>> b = torch.tensor([[0, 1, 2],[3,10,2],[10,2,1]])
>>> b
tensor([[ 0,  1,  2],
        [ 3, 10,  2],
        [10,  2,  1]])
>>> b.stride()
(3, 1)
>>> b = torch.tensor([[0, 1, 2,4],[3,10,2,3],[10,2,1,1]])
>>> b.stride()
(4, 1)
>>> b.stride(0)
4
>>> b.stride(1)
1

        上面的4指的是第0个维度中的一个元素[0, 1, 2, 4]到下一个元素[3, 10, 2, 3]所需要的步长为4;

        也可以理解从第一个的第一个索引到下一个元素第一个索引跨度是4;

        1指的是第1个维度[0, 1, 2, 4]中的一个元素0到下一个元素1所需要的步长为1;

参考:pytorch笔记(一)——tensor的storage()、stride()、storage_offset()_Zoran_卓的博客-CSDN博客_tensor的stride

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值