02-Tensor的创建


在Torch中张量以 “类” 的形式封装起来,对张量的一些运算、处理的方法被封装在类中:

官网文档

1、基本创建方式

1.1 torch.tensor

注意这里的tensor是小写,该API是根据指定的数据创建张量。

import torch
import numpy as np
def test001():
    print(torch.__version__)
    # 创建一个张量,传入一个数字
    x=torch.tensor(10)
    print(x)
    # 创建一个张量,传入一个列表
    x2=torch.tensor([10])
    # x2=torch.tensor([10,20])
    print(x2)
    # 看张量是什么数据:对象类型 用类创建的==> torch.Tensor
    print(type(x),type(x2))
    print(type(100))

    # 创建一个张量,传入一个numpy数组
    arr1=np.array([1,2,3])
    arr1=np.random.randint(0,100,(3,3))
    x3=torch.tensor(arr1)
    print(x3)

1.2 torch.Tensor

注意这里的Tensor是大写,该API根据形状创建张量,其也可用来创建指定数据的张量。

def test002():
    x=torch.Tensor(10)
    print(x)
    x2=torch.Tensor(1,2,3,2)
    print(x2)

    x3=torch.Tensor([1,2,3])#传入一个列表 就表示把列表转化为张量tensor
    print(x3)

    x4=torch.Tensor([10])
    print(x4)#tensor([10])和tensor(10)是两种不同的张量类型

2、创建线性和随机张量

在 PyTorch 中,可以轻松创建线性张量和随机张量。

2.1 创建线性张量

import torch

def test001():
    torch.set_printoptions(sci_mode=False) # 设置打印精度
    
    x = torch.arange(1,10,2) # 创建一个从1到9的步长为2的序列
    print(x)

    x2 = torch.linspace(0, 10, 5) # 在指定空间按照元素个数生成张量:等差
    print(x2)

    x3 = torch.logspace(0, 10, 5) # 在指定空间按照元素个数生成张量:等比
    print(x3)
    
test001()

2.2 创建随机张量

使用torch.randn 创建随机张量。

2.2.1 随机数种子

随机数种子(Random Seed) 是用于初始化随机数生成器的一个值。在计算机科学和统计学中,随机数种子决定了随机数生成器的起始状态,从而影响生成的随机数序列。
原理:
随机数生成器实际上是一个确定性算法,它根据种子值生成一个伪随机数序列。如果种子相同,生成的随机数序列也会完全相同。

import torch
def test001():
    # 设置随机数种子
    torch.manual_seed(123)

    # 获取随机数种子
    print(torch.initial_seed())
if __name__ == "__main__":
    test001()

2.2.2 随机张量

在 PyTorch 中,种子影响所有与随机性相关的操作,包括张量的随机初始化、数据的随机打乱、模型的参数初始化等。通过设置随机数种子,可以做到模型训练和实验结果在不同的运行中进行复现。

import torch


def test001():
    # 1. 设置随机数种子
    torch.manual_seed(123)

    # 2. 获取随机数种子
    print(torch.initial_seed())

    # 3. 生成随机张量
    print(torch.rand(2, 3))

    # 4. 生成随机张量:标准正态分布
    print(torch.randn(2, 3))

    # 5. 原生服从正态分布:均值为2, 方差为3,形状为1*4的正态分布
    print(torch.normal(mean=2, std=3, size=(1, 4)))
	
    # 6. 生成随机张量整数
    print(torch.randint(4,3)

if __name__ == "__main__":
    test001()

3、创建0、1张量

3.1 创建全0张量

import torch

# 创建一个 2x3 的全 0 张量
zeros_tensor = torch.zeros(2, 3)
print(zeros_tensor)

3.2 创建全1张量

import torch

# 创建一个 2x3 的全 1 张量
ones_tensor = torch.ones(2, 3)
print(ones_tensor)

3.3 创建自定义形状的 0-1 张量

import torch

# 创建一个 3x3x3 的全 0 张量
zeros_tensor = torch.zeros(3, 3, 3)
print(zeros_tensor)

# 创建一个 3x3x3 的全 1 张量
ones_tensor = torch.ones(3, 3, 3)
print(ones_tensor)

3.4 创建与现有张量形状相同的 0-1 张量

import torch

# 创建一个随机张量
random_tensor = torch.randn(2, 3)

# 创建与 random_tensor 形状相同的全 0 张量
zeros_like_tensor = torch.zeros_like(random_tensor)
print(zeros_like_tensor)

# 创建与 random_tensor 形状相同的全 1 张量
ones_like_tensor = torch.ones_like(random_tensor)
print(ones_like_tensor)

3.5 创建布尔类型的 0-1 张量

import torch

# 创建一个布尔类型的全 0 张量
bool_zeros_tensor = torch.tensor([[0, 0], [0, 0]], dtype=torch.bool)
print(bool_zeros_tensor)

# 创建一个布尔类型的全 1 张量
bool_ones_tensor = torch.tensor([[1, 1], [1, 1]], dtype=torch.bool)
print(bool_ones_tensor)

3.6 创建稀疏的 0-1 张量

import torch

# 创建一个稀疏的 0-1 张量
indices = torch.tensor([[0, 1], [2, 0]])  # 非零元素的索引
values = torch.tensor([1, 1], dtype=torch.float32)  # 非零元素的值
shape = (3, 3)  # 张量的形状

sparse_tensor = torch.sparse_coo_tensor(indices, values, shape)
print(sparse_tensor)

4、创建指定值张量

torch.full 和 torch.full_like 创建全为指定值张量。

import torch
import numpy as np

def test001():
    # 创建指定值的张量
    data = torch.full((2, 3), 666.0)
    print(data, data.dtype)

    mask = np.zeros((3, 4))
    data = torch.full_like(torch.tensor(mask), 999)
    print(data)


if __name__ == "__main__":
    test001()

5、创建单位矩阵张量

import torch
import numpy as np


def test002():
    data = torch.eye(4)
    print(data)


if __name__ == "__main__":
    test002()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值