张量的创建
张量
张量(Tensor):
PyTorch 张量是一种用于存储多维数组的数据结构,类似于 NumPy 的多维数组,是深度学习里最基础的数据载体
张量按维度分为下面几类:
张量基本创建方式
torch.tensor()
根据给定数据创建张量,小写tensor
1)传入列表 / 数组,自动推断数据类型
# 用列表创建张量 t1=torch.tensor([1,2,3]) print(t1) # tensor([1, 2, 3])
2)特点:拷贝数据 ,新建张量;
日常开发首选torch.Tensor()
大写Tensor,有两种用法:
1)传入数字形状:创建指定 shape 的张量(内容未初始化,随机垃圾值)
t2=torch.Tensor(2,3) # 创建2行3列张量 print(t2)
2)传入列表数据:也可以创建张量(不推荐,容易混淆)
t3=torch.Tensor([1,2,3]) print(t3)
3)注意:大写torch.Tensor默认是float32类型;
小写torch.tensor会根据输入自动判断类型torch.IntTensor / torch.FloatTensor / torch.DoubleTensor
1)创建指定数据类型的张量
(旧 API 写法,新版本更推荐在torch.tensor里用dtype=指定类型)
2)
# 整型张量 t_int=torch.IntTensor([1,2,3]) # 浮点型张量 float32 t_float=torch.FloatTensor([1.1,2.2]) # 双精度浮点 float64 t_double=torch.DoubleTensor([1.1,2.2]) print(t_int) print(t_float) print(t_double)
更推荐写法:
t = torch.tensor([1, 2, 3], dtype=torch.int32) print(t)重点区分
torch.tensor ()
torch.tensor():
根据传入的数据创建张量,可以传入数字、numpy 数组、Python 列表,会自动继承输入的数据类型
# 1 创建张量标量(0维张量) data=torch.tensor(10) print(data) data1=np.random.randn(2,3) # numpy 默认 float64 data2=torch.tensor(data1) print(data2) # 3. python 创建列表 data3=[[1,2,3],[4,5,6]] data4=torch.tensor(data3) print(data4)
- 关键点
1)torch.tensor(10):传入单个数字,生成0 维标量张量 ,
输出tensor(10),不是数组形式
2)numpy 数组转张量
a)numpy 的浮点数默认是float64,所以生成的张量dtype=torch.float64b)torch.tensor()会拷贝一份数据 ,新张量和原 numpy 数组互不影响
3)Python 列表创建张量
a)列表里写带小数点数字10.,代表浮点数,PyTorch 默认转成float32b)两层列表[[...],[...]]→ 2 维张量(矩阵)
torch.Tensor ()
两种写法
1)传数字(形状参数):创建指定形状的张量,不初始化,
里面是内存里残留的随机垃圾值
2)传列表:创建带指定数据的张量
默认数据类型:float32
# 1. 创建2行3列的张量,只指定形状,里面的值没初始化的随机值 data=torch.Tensor(2,3) print(data) # 2. 传入列表,按照列表数据创建张量 data1=torch.Tensor([10,20,30]) print(data1) data2=torch.Tensor([10]) print(data2)
- 核心对比
torch.IntTensor/ FloatTensor / DoubleTensor
传数字((2,3)):创建指定形状、对应数据类型的未初始化张量(内存残留垃圾值)
传列表数据:自动把里面元素强制转换成对应类型
# 1. 创建2行3列,dtype=int32 的张量,没初始化,里面的是随机脏整数 data=torch.IntTensor(2,3) print(data) # 2. 传入浮点列表,自动强制转成int32,小数直接砍掉,不是四舍五入,是截断 data1=torch.IntTensor([2.5,3.3]) print(data1) # 3. 其他旧版类型 data2=torch.ShortTensor() # int 16 data3=torch.LongTensor() # int 64 data4=torch.FloatTensor() # int 32 data5=torch.DoubleTensor() # int 64
新版推荐写法
1)torch.tensor() + 指定 dtype 参数,可读性更好
data=torch.tensor([2.5,3.3],dtype=torch.int32) print(data)
创建线性 , 随机张量
torch.arange () 和 torch.linspace ()
torch.arange(start, end, step)
1)按步长生成张量,区间是左闭右开 [start, end),不包含 end
data=torch.arange(0,10,2) print(data)start=0,end=10,步长 step=2
取值:0,2,4,6,8;下一个是 10,等于 end,所以不取
生成的是整数张量











