一个torch.Storage是一个单一数据类型的连续一维数组。
每个torch.Tensor都有一个对应的、相同数据类型的存储:class torch.FloatStorage
1 torch.Storage类型
import torch
torch.FloatStorage([1,2,3,4,5])
torch.ByteStorage([1,2,3,4,5])
torch.ShortStorage([1,2,3,4,5])
torch.IntStorage([1,2,3,4,5])
torch.LongStorage([1,2,3,4,5])
torch.FloatStorage([1,2,3,4,5])
torch.DoubleStorage([1,2,3,4,5])
torch.ShortStorage([1,2,3,4,5])
1
2
3
4
5
[torch.ShortStorage of size 5]
2 构造Storage
你可以使用torch.FloatStorage()构造一个空的Storage,构造函数的数值是随机初始化的。
我们可以使用2种方法来构造torch.FloatStorage()并把它存入内存中
# 1.通过数组
torch.FloatStorage([1,2,3,4,5])
1.0
2.0
3.0
4.0
5.0
[torch.FloatStorage of size 5]
# 2.随机生成一个Storage
torch.FloatStorage(5)
0.0
2.524354896707238e-29
5.68810702241079e+19
-2.5249696896566726e-29
2.802596928649634e-45
[torch.FloatStorage of size 5]
3 Storage的操作
3.1 类型的转化
byte():将此存储转为byte类型
char():将此存储转为char类型
float():将此存储转为float类型
double():将此存储转为double类型
half():将此存储转为half类型
int():将此存储转为int类型
long():将此存储转为long类型
short():将此存储转为short类型
a = torch.FloatTensor([1,2,3,4])
print(a.int().type()) # 转换成int
print(a.long().type()) # 转换成long
torch.IntTensor
torch.LongTensor
3.2 复制
clone():返回此存储的一个副本
copy_():复制
cpu():如果当前此存储不在CPU上,则返回一个它的CPU副本
cuda(device=None, async=False):返回此对象在CUDA内存中的一个副本。如果此对象已在CUDA内存中且在正确的设备上,那么不会执行复制操作,直接返回原对象。
a = torch.FloatTensor([1,2,3,4])
b = a.clone()
print(b)
tensor([ 1., 2., 3., 4.])
3.3 torch.Storage与torch.Tensor之间的转化
将Tensor转换为Storage非常简单,只需要storage()函数即可
a = torch.FloatTensor([1,2,3,4])
print(a)
print(a.storage())
tensor([ 1., 2., 3., 4.])
1.0
2.0
3.0
4.0
[torch.FloatStorage of size 4]
3.4 其他操作
大部分操作都与torch.Tensor包中类似。如下给出:
data_ptr() =>获取第一个元素的位置
element_size() =>回单个元素的字节大小
fill_() =>填充某个值
new() =>构建一个有相同数据类型的storage
pin_memory() =>如果此存储当前未被锁定,则将它复制到锁定内存中。
resize_() => 重新调整大小
share_memory_() =>将此存储移动到共享内存中。
size() =>返回storage大小
tolist() =>返回一个包含此存储中元素的列表
type(new_type=None, async=False) =>将此对象转为指定类型。
from_buffer()
is_cuda = False
is_pinned()
is_shared()
is_sparse = False