张量tensor中用None

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 小结

一般用在初始化上,可以快速创建矩阵

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值