版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36022260/article/details/82990426
Tensor
配套代码:https://download.csdn.net/my
导入torch 包
from __future__ import print_function
import torch
构建一个未初始化的5x3的矩阵
x = torch.empty(5,3)
print(x)
tensor([[-1.1159e+09, 2.5644e-43, -1.1159e+09],
[ 2.5644e-43, 0.0000e+00, 0.0000e+00],
[ 0.0000e+00, 0.0000e+00, 0.0000e+00],
[ 0.0000e+00, 0.0000e+00, 0.0000e+00],
[ 2.8181e+20, 1.5134e-43, 0.0000e+00]])
构建一个随机初始化的5x3矩阵
y = torch.rand(5,3)
print(y)
tensor([[0.8610, 0.6330, 0.2864],
[0.6327, 0.8306, 0.1751],
[0.2504, 0.4190, 0.9789],
[0.0831, 0.1019, 0.7823],
[0.0430, 0.2509, 0.7078]])
构造零矩阵类型为long
z = torch.zeros(5,3,dtype=torch.long)
print(z)
tensor([[0, 0, 0],
[0, 0, 0],
[0, 0, 0],
[0, 0, 0],
[0, 0, 0]])
直接从数据构造Tensor
x = torch.tensor([5.3,3.3])
print(x)
tensor([5.3000, 3.3000])
根据现有Tensor创建Tensor
x = x.new_ones(5,3,dtype=torch.float)
print(x)
tensor([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])
得到Tensor的大小
size = x.size()
print(size)
torch.Size([5, 3])
注意:
torch.Size
实际上是一个元组,因此它支持所有元组操作。
Operations
矩阵相加 1.:
y = torch.rand(5,3)
print(x+y)
Out:
tensor([[1.8059, 1.7178, 1.2949],
[1.2252, 1.0031, 1.6399],
[1.0712, 1.6112, 1.6976],
[1.3032, 1.2609, 1.5103],
[1.0634, 1.9855, 1.4810]])
矩阵相加 2.:
result = torch.add(x,y)
print(result)
Out:
tensor([[1.8059, 1.7178, 1.2949],
[1.2252, 1.0031, 1.6399],
[1.0712, 1.6112, 1.6976],
[1.3032, 1.2609, 1.5103],
[1.0634, 1.9855, 1.4810]])
矩阵增加 3:
y.add_(x)
print(y)
OUT:
tensor([[1.8059, 1.7178, 1.2949],
[1.2252, 1.0031, 1.6399],
[1.0712, 1.6112, 1.6976],
[1.3032, 1.2609, 1.5103],
[1.0634, 1.9855, 1.4810]])
注意:
任何使原Tensor变形的操作都是用_
。后固定的。例如:x.copy_(y)
,x.t_()
,将改变x
提供输出Tensor作为参数
print(torch.add(x,y,out = result))
可以使用标准的Numpy索引
# 矩阵第二列
print(y[:,1])
OUT:
tensor([1.7178, 1.0031, 1.6112, 1.2609, 1.9855])
调整大小:调整大小或重塑Tensor使用torch.view()
x = torch.randn(4,4)
y = x.view(-1,8)
print(y,y.size())
OUT:
tensor([[ 0.1154, -0.6524, 0.9156, -0.6724, -1.4680, 0.0348, 0.0317, 0.1726],
[ 1.1404, 0.5799, -1.5505, -0.1009, 0.1317, -0.5563, 0.9024, 1.1492]]) torch.Size([2, 8])
如果你有一个元素张量,用于.item()
获取值作为Python数字
x = torch.rand(1)
print(x)
print(x.item())
OUT:
tensor([0.5729])
0.5729162096977234
Numpy Bridge
将Torch Tensor转换为NumPy阵列(反之亦然)是一件轻而易举的事。
Torch Tensor和NumPy阵列将共享其底层内存位置,更改一个将改变另一个。
将Tensor 转化为Numpy数组
a = torch.rand(5)
b = a.numpy()
print(b)
OUT:
tensor([0.1917, 0.5463, 0.3016, 0.2616, 0.5205])
[0.1916883 0.5463207 0.30155057 0.2615763 0.5205126 ]
Torch Tensor和NumPy阵列将共享其底层内存位置,更改一个将改变另一个,
了解numpy数组的值如何变化。
a.add_(1)
print(a)
print(b)
OUT:
tensor([1.1917, 1.5463, 1.3016, 1.2616, 1.5205])
[1.1916883 1.5463207 1.3015506 1.2615763 1.5205126]
将NumPy数组转换为Torch Tensor
了解更改np阵列如何自动更改Torch Tensor
import numpy as np
a = np.ones(5)
b = torch.from_numpy(a)
np.add(a,1,out=a)
print(a)
print(b)
OUT:
[2. 2. 2. 2. 2.]
tensor([2., 2., 2., 2., 2.], dtype=torch.float64)