文章目录
创建数组
如何使用list生成一维(多维)tensor
import torch
import numpy as np
#创建一个未初始化的tensor
x = torch.empty(2,3)
#numpy中无对应
#初始化一个随机的tensor
x = torch.rand(2,3)
#x = np.random.random((2,3))
#初始化一个long型全0的tensor
x = torch.zeros(2,3,dtype=torch.long)
#x = np.zeros((2,3))
#初始化一个long型全1的tensor
x = torch.ones(2,3,dtype=torch.long)
#x = np.ones((2,3))
#初始化一个long型对角全为1的tensor
x = torch.eye(3,dtype=torch.long)
#x = np.eye(3)
#初始化一个确定好数值的tensor
x = torch.tensor([[5,5,2],[1,2,3]])
#x = np.array([[5,5,2],[1,2,3]])
#获取tensor的形状
x.shape
x.size()
#np格式,x.shape,x.size
数组基本操作
加减乘除
不同数组点乘
a = torch.ones(2,2, dtype=int)
b = torch.tensor([[1,2],[3,4]])
c = torch.matmul(a,b)
#c = a.dot(b) np格式
改变tensor的shape、增加新的维度
#改变tensor的shape
d = a.view(-1,1)
#d的sharpe为(4,1)
#d = a.reshape((4,1)),np的格式
#a.resize(4,1)
#展开为一维
e = a.flatten()
#e = a.flatten(),numpy格式一模一样
#不同维度
e = a.reshape(4,1)
e = a.resize(4,1)
#numpy和这个一模一样
#增加新的维度
d = a.unsqueeze(0)
e = d.squeeze(0)
tensor合并分割
tensor分割
#等分用chunk
# 创建一个4×3的矩阵
t1 = torch.arange(12).reshape(4, 3)
t1
# tensor([[ 0, 1, 2],
# [ 3, 4, 5],
# [ 6, 7, 8],
# [ 9, 10, 11]])
t2, t3 = torch.chunk(t2,2,dim=0)
#自定义分割用split
t4,t5 = torch.split(t2,[1,3], dim=0)
tensor合并
a = torch.zeros(2, 3)
a
# tensor([[0., 0., 0.],
# [0., 0., 0.]])
b = torch.ones(2, 3)
b
# tensor([[1., 1., 1.],
# [1., 1., 1.]])
torch.cat((a, b), dim = 0)
# tensor([[0., 0., 0.],
# [0., 0., 0.],
# [1., 1., 1.],
# [1., 1., 1.]])
##和np一样,np.concatenate((a,b),dim=0)
#tensor堆叠
torch.stack((a, b), dim = 0)
#np.stack((a, b), dim = 0)
numpy和tensor相互转换
两个函数所产生的的Tensor和NumPy中的数组共享相同的内存(所以他们之间的转换很快),改变其中一个时另一个也会改变!
tensor转换为np,内存一致;np转换为tensor内存,内存不一致
a = torch.ones(5)
#转化为numpy只有这一种方法
b = a.numpy()
#转化为tensor,c种方法共享内存,d不共享内存
c = torch.from_numpy(b)
d = torch.tensor(b)
#np转tensor
a = np.ones(3)
b = torch.from_numpy(a)
print(a, b)
a += 1
print(a, b)
b += 1
print(a, b)
#[1. 1. 1.] tensor([1., 1., 1.], dtype=torch.float64)
#[2. 2. 2.] tensor([2., 2., 2.], dtype=torch.float64)
#[3. 3. 3.] tensor([3., 3., 3.], dtype=torch.float64)
#使用torch.tensor()将NumPy数组转换成Tensor(不再共享内存)
c = torch.tensor(a)
a += 1
print(a, c)
[4. 4. 4.] tensor([3., 3., 3.], dtype=torch.float64)
#tensor转np
a = torch.ones(5)
b = a.numpy()