1. 张量tensor中用None
1. 1说明
tensor中增加维度
最近在看李沐的书籍中看到有些代码中实现的是张量中通过使用 None 来进行维度的增加,保持形状不变。
1.2 代码
# -*- coding: utf-8 -*-
# @Project: zc
# @Author: zc
# @File name: test_new
# @Create time: 2021/12/21 13:49
import torch
x = torch.randn(3, 4)
# 在第 0 维,增加维度
x_0 = x[None, :]
# 在第 1 维,增加维度
x_1 = x[:, None]
# 在第 2 维,增加维度
x_2 = x[:, :, None]
print(f'x_0={x_0.shape}')
print(f'x_1={x_1.shape}')
print(f'x_2={x_2.shape}')
1.3 结果
x_0=torch.Size([1, 3, 4])
x_1=torch.Size([3, 1, 4])
x_2=torch.Size([3, 4, 1])
1.4 小结
如果想增加张量的维度,我们只需要在指定的维度上用 None 即可。
1.5 分割
我们通过None可以对数据进行分割;
- 一维数据切割;dim=0表示整行作为一个样本,dim=1表示按列(元素)进行切割
print("*" * 20)
print("一维矩阵进行切片")
x = torch.arange(4)
# 将第0为进行切片处理,即按行进行切片,每行作为样本
x_0 = x[None, :]
# 将第1为进行切片处理,即按列进行切片,每列作为样本
x_1 = x[:, None]
print(f"x={x}")
print(f"x_0={x_0}")
print(f"x_0.shape={x_0.shape}")
print(f"x_1={x_1}")
print(f"x_1.shape={x_1.shape}")
print("*" * 20)
- 结果:
********************
一维矩阵进行切片
x=tensor([0, 1, 2, 3])
x_0=tensor([[0, 1, 2, 3]])
x_0.shape=torch.Size([1, 4])
x_1=tensor([[0],
[1],
[2],
[3]])
x_1.shape=torch.Size([4, 1])
********************
- 二维数据切割:
dim=0 ;表示整体切割为一个样本
dim=1;表示表示按行进行分割
dim=2;表示为按列进行分割
print("\n")
print("*" * 20)
print("二维矩阵进行切片")
y = torch.arange(12).reshape(3, 4)
y_0 = y[None, :, :]
y_1 = y[:, None, :]
y_2 = y[:, :, None]
print(f"y={y}")
print(f"y_0={y_0}")
print(f"y_0.shape={y_0.shape}")
print(f"y_0.shape={y_0.shape}")
print(f"y_1={y_1}")
print(f"y_1.shape={y_1.shape}")
print(f"y_2={y_2}")
print(f"y_2.shape={y_2.shape}")
print("*" * 20)
- 结果
********************
二维矩阵进行切片
y=tensor([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
y_0=tensor([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]]])
y_0.shape=torch.Size([1, 3, 4])
y_0.shape=torch.Size([1, 3, 4])
y_1=tensor([[[ 0, 1, 2, 3]],
[[ 4, 5, 6, 7]],
[[ 8, 9, 10, 11]]])
y_1.shape=torch.Size([3, 1, 4])
y_2=tensor([[[ 0],
[ 1],
[ 2],
[ 3]],
[[ 4],
[ 5],
[ 6],
[ 7]],
[[ 8],
[ 9],
[10],
[11]]])
y_2.shape=torch.Size([3, 4, 1])
********************
2. torch.full
2.1 说明
torch.full 函数主要是能够生成一个给定值的矩阵
2.2 代码
import torch
# 生成一个 3 行 4 列的矩阵,所有的值用 10.2 填充
x = torch.full((3, 4), 10.2)
print(f'x={x}')
2.3 结果
x=tensor([[10.2000, 10.2000, 10.2000, 10.2000],
[10.2000, 10.2000, 10.2000, 10.2000],
[10.2000, 10.2000, 10.2000, 10.2000]])
2.4 小结
一般用在初始化上,可以快速创建矩阵