Tensor
张量的转换
张量转换为numpy数组
data_tensor.numpy();
data_tensor.numpy().copy;
numpy数组转换为张量
使用from_numpy将ndarray转换为Tensor,模式是共享内存。
通过使用copy实现内存拷贝。
data_numpy = np.array([2,3,4]); 借助于torch实现numpy转张量tensor
data_tensor = torch.from_numpy(data_numpy);
这里的tensor和numpy是共享内存。
data_tensor2=torch.tensor(data_numpy);
这种方式默认是不共享内存的。
data = torch.tensor([30,])
print(data.item())
针对只有一个元素的,使用data.item()获取元素
张量的计算
data =torch.randint(0,10,[2,3]);
new_data = data.add(10);
data.sub(10)
data.mul(10)
data.div(10)
data.neg() //取负数
data3 = torch.mul(data1,data2) //点乘
data3 = data1*data2
matmul 矩阵乘法运算
张量的其他计算
data = torch.randint(0,10,[2,3], dtype = torch.float64)
均值
data.mean()
data.mean(dim=0) //按照行计算均值
data.mean(dim=1) // 按照列计算均值
平方根
data.sqrt()
求和
data.sum()
data.sum(dim=0)
data.sum(dim=1)
指数计算
torch.pow(data,2)
data.exp()
对数计算 以e为底
data.log()
data.lo2()
data.log10()
张量的索引
data[0]
data[:,0] //第一列的元素
data([0,1], [1,2]) //返回第0行第一列,第1行第二列的元素。
data([[0,[1]], [1,2]]) // 返回的第0、1行的1、2列四个元素。
data[:3, :2]) 前三行的前两列数据
data([2:, :2]) 第二行到最后的前两列数据
data[data[:,2]>5] data数据中第三列大于5的行数据。
data[:, data[1]>5] data数据中第二行大于5的列数据
多维索引
torch.randint(0,10,[3,4,5]) 三通道的四行五列
data[0,:,:] //0轴上的第一个元素
data[:,0,:] //所以纬度中第一行的元素
data[:,:,0] // 所有纬度中第一列的元素
reshape()函数
在保证张量数据不便的情况下,只改变纬度
squeeze和unsqueeze函数 删除的添加形状为1的纬度
mydata2=mydata1.unsqueeze(dim=0); //在0纬上拓展纬度
mydata2=mydata1.unsqueeze(dim=1); //在1纬上拓展纬度
mydata5=mydata1.sequeeze(); //压缩纬度
torch.transpose(data, 1,2) // 交互1纬和2纬的数据
print(data.shape)
torch.permute(data, [1,2,0])//一次交换多个纬度
data.view(3,2) //1.判断是否是整块内存,data.is_contiguous()
torch.cat() 实现将两个张量进行拼接
torch.cat([data1,data2 ],dim-=0)