pytorch基础tensor

pytorch官方文档
创建tensor

  • 首先,我们需要明确一下,torch.Tensor()是python类,更明确地说,是默认张量类型torch.FloatTensor()的别名,torch.Tensor([1,2])会调用Tensor类的构造函数__init__,固定地生成单精度浮点类型的张量
a=torch.Tensor([1,2])
print(a)#tensor([1., 2.])
print(a.type())#torch.FloatTensor
  • 而torch.tensor()仅仅是python函数torch.tensor ,函数原型是:
torch.tensor(data, dtype=None, device=None, requires_grad=False

其中data可以是:list, tuple, NumPy ndarray, scalar和其他类型。
torch.tensor会从data中的数据部分做拷贝(而不是直接引用),根据原始数据类型生成相应的torch.LongTensor、torch.FloatTensor和torch.DoubleTensor张量。

device=torch.device('cuda' if torch.cuda.is_available() else 'cpu')
b=torch.tensor([1,2])
print(b)#tensor([1, 2])
print(b.type())#torch.LongTensor
b=torch.tensor([1,2],device=device,dtype=torch.float32)#放GPU上
print(b.type())#torch.cuda.FloatTensor
  • 同样tensor可以做一些运算 举例只是部分
#
#切片索引
tensor=torch.ones(4,4)
tensor[:,1]=0 #每一行的第一列为0
#连接
t1=torch.cat([tensor,tensor,tensor],dim=1)
#数字乘
print(tensor.mul(3))
#矩阵乘
print(tensor.matmul(tensor))
#加法
print(tensor.add_(4))
#数据的转换
  • numpy与tensor互相转换
t=torch.tensor([1,2,3])
t_numpy=t.numpy()
print(type(t_numpy))#
t_tensor=torch.from_numpy(t_numpy)
print(t_tensor.type())#torch.LongTensor
  • list与tensor互相转换
l=[1,2,3]
l_tensor=torch.tensor(l)
print(l_tensor.type())
l_tensor=torch.tensor(np.array(l))#先转成numpy再转成tensor

list转tensor几种方式对比

(1) list->tensor(注:list中的元素不含numpy.ndarrays)

(2) list->tensor(注:list中的元素含numpy.ndarrays)

转换方式为torch.tensor(l)

(3) list->numpy.ndarrays->tensor(注:list中的元素不含numpy.ndarrays)

(4) list->numpy.ndarraays->tensor(注:list中的元素含numpy.ndarrays)

#转换方式为torch.tensor(np.array(l))

但是(1)比(3)快 而(4)比(2)快多了

总结
torch包中定义了10种具有CPU和GPU变体的tensor类型。

  torch.Tensor或torch.tensor是一种包含单一数据类型元素的多维矩阵。torch.Tensor或torch.tensor注意事项:

  (1). torch.Tensor是默认tensor类型torch.FloatTensor的别名。

  (2). torch.tensor总是拷贝数据。

  (3).每一个tensor都有一个关联的torch.Storage,它保存着它的数据。

  (4).改变tensor的方法是使用下划线后缀标记,如torch.FloatTensor.abs_()就地(in-place)计算绝对值并返回修改后的tensor,而torch.FloatTensor.abs()在新tensor中计算结果。

  (5).有几百种tensor相关的运算操作,包括各种数学运算、线性代数、随机采样等。

  创建tensor的四种主要方法:

  (1).要使用预先存在的数据创建tensor,使用torch.tensor()。

  (2).要创建具有特定大小的tensor,使用torch.*,如torch.rand()。

  (3).要创建与另一个tensor具有相同大小(和相似类型)的tensor,使用torch.*_like,如torch.rand_like()。

  (4).要创建与另一个tensor类型相似但大小不同的tensor,使用tensor.new_*,如tensor.new_ones()。

你可能感兴趣的:(杂乱的笔记本,pytorch,python,numpy)