创建数组
#定值
x=torch.Tensor([[1,2,3],[4,5,6]])
#0数组
x=torch.zeros(2,3)
#1数组
x=torch.ones(2,3)
#随机数组,相当于np.random.randn(2,3)
x=torch.randn(2,3)
# 创建'空'数组
x=torch.empty(2,3)
# 复制指定的形状与类型,值全是1
x1=torch.ones_like(x)
数组运算
#计算 使用方法后加“_”,自身值变化
x.add_(1)
#矩阵运算
#矩阵相乘
x.mm(y)
torch.mm(x,y)
#相当于numpy的matmul(matrix multiply ) :
np.matmul(x,y) /
#dot用于向量的点乘计算,计算结果为一个数字
x.dot(y)
#两种方式结果相同
torch.doc(x,y)
#相当于np中:
np.doc(x,y)
数组内数据类型转换
x=torch.tensor([1.2],dtype=float)
#将x内数据均转为long
x.long()
Shape相关
x=torch.ones([2,3])
#获取Shape 对于Tensor,两种方式相同
x.shape
x.size()
#相当于numpy的reshape
x.view(3,2)
#后边-1代表系统自动推算
x.view(3,-1)
# 切片
#与numpy相同,相当于pandas中的iloc[1,1:2]
#取第2行,与2-3列(从0开始索引)
x[1,1:2]
#取第2行,所有列
x[1,:]
item()取值
# 取出指定位置的数值
x[1][2].item()
与numpy转换
注意:转换后的两个变量,共享内存空间,共同变化!
# torch->numpy
x=torch.ones(2,3)
arr=x.numpy()
#numpy-> torch
arr=np.ones([2,3])
x=torch.from_numpy(arr)
#注意:转换后的两个变量(x与arr),共享内存空间,共同变化!
#举例: 讲x进行+1操作后,arr的值也发生同样变化.(注意是add_())
x=x.add_(1)
print(arr)
#注意例外: x=x+1,相当于x重新指向新的地址,因此arr不会变化!
x=x+1
print(arr)
设备转换,指定设备计算
#查看gpu是否可用
torch.cuda.isavailable()
#引用gpu
device=torch.device("cuda")
#将tensor放到gpu 以下两种方式相同
x=x.cuda()
x=x.to(device)
#将tensor放到gpu上计算(指定设备)
y=tensor.ones_like(x,device=device)
#使用gpu计算,保证两个tensor都在gpu上直接执行即可
x+y
#注意,numpy相关的操作必须转回cpu才可以执行
#转回cpu
y=y.to("cpu")
#将x暂时转到cpu计算
t=x.cpu().data.numpy()