【d2l】2.1.数据操作

【d2l】2.1.数据操作

import torch

初始化

序列定义

x = torch.arange(12)

全零张量

torch.zeros(2, 3, 4)

全一张量

torch.ones(2, 3, 4)

随机数

torch.randn(3, 4)

自定义

torch.tensor([[1, 1, 4], [5, 1, 4], [1, 9, 1], [9, 1, 9]])

操作与运算

查看张量形状

x.shape

查看元素总数

x.numel()

重新指定形状(可有-1占位)

X = x.reshape(3, 4)
X = x.reshape(3, -1)
X = x.reshape(-1, 3)

加、减、乘、除、幂次、exp

X + Y
X - Y
X * Y
X / Y
X ** Y
torch.exp(X)

矩阵连接

print(f'竖直连接: \n{torch.cat((X, Y), dim = 0)}')
print(f'横向连接: \n{torch.cat((X, Y), dim = 1)}')

逻辑矩阵

X == Y # 逻辑运算符均可

元素求和

X.sum()

广播机制(不同形状的会强制转换成相同形状进行运算)

a = torch.arange(3).reshape((3, 1))
b = torch.arange(2).reshape((1, 2))
a + b
tensor([[0, 1],
        [1, 2],
        [2, 3]])

索引与切片

切片的操作与python自身的序列差不多

X[-1]   # 最后一行
X[1, 3] # 第二第三行

修改也可以通过下标访问

X[1, 2] = 9    # 单点修改
X[0:2, :] = 12 # 切片修改

内存优化

形如

Y = X + Y

的运算会给Y开辟新空间,有两个处理方式,零张量或是后续无用张量再利用

Z = torch.zeros_like(Y)
Z[:] = X + Y

X += Y

numpy与tensor转化

多元素张量

A = X.numpy()
B = torch.tensor

单元素可以通过.item()或自带库转化

a.item()
float(a)
posted @ 2025-12-13 15:22  R4y  阅读(0)  评论(0)    收藏  举报