《动手学深度学习》学习笔记1

数据操作

创建张量

import torch
# 创建张量---数组
# 一维
x = torch.arange(12)
print(x)
# 访问形状
print(x.shape)
# 总数
print(x.numel())
# 修改矩阵的形状
print(x.reshape(3, 4))
# 创建两个全为0的3*4的矩阵
print(torch.zeros(2,3,4))
# 创建两个全为1的3*4的矩阵
print(torch.ones(2,3,4))
# 均值为0,标准差为1的标准高斯分布(正态分布)种的随机采样
print(torch.randn(3,4))
# 自定义张量
print(torch.tensor([[2,1,4,3],[1,2,3,4],[4,3,2,1]]))

切片

x = torch.arange(12,dtype=torch.float32).reshape((3,4))
# 索引和切片,-1为最后一个元素,[a,b]不包括右括号的项
print(x[-1],x[0:3])
# 指定索引将元素写入矩阵
x[1, 2] = 9
print(x)
# 为多个元素赋相同的值
x[0:2,:] = 12
print(x)

连结张量

# 连结张量
x = torch.arange(12,dtype=torch.float32).reshape((3,4))
y = torch.tensor([[2,1,4,3],[1,2,3,4],[4,3,2,1]])
# 纵向连结--沿行
print(torch.cat((x,y),dim=0))
# 横向连结--沿列
print(torch.cat((x,y),dim=1))
# 逻辑运算构建二元张量
print(x==y)
# 对张量元素求和产生只有一个元素的张量
print(x.sum())

不同对象之间的转化

# 转换其他python对象
A = a.numpy()
B = torch.tensor(A)
print(type(A),type(B))
# 将张量转化为标量
a = torch.tensor([3.5])
print(a,a.item(),float(a),int(a))

运算

# 数据运算
x = torch.tensor([3,4,1,5])
y = torch.tensor([1,2,1,4])
# 加、减、乘、除、幂运算
print(x+y,x-y,x*y,x/y,x**y)
# 以自然数e为底数的运算
print(torch.exp(x))

广播机制

# 广播机制
# 原理:通过矩阵广播为3*2的矩阵,缺列的复制列,缺行的复制行
a = torch.arange(3).reshape((3,1))
b = torch.arange(2).reshape((1,2))
'''
a变为
0 0
1 1
2 2
b变为
0 1
0 1
0 1
'''
print(a,b)
print(a+b)

节省内存方法

# 节省内存:用切片表示法将操作结果分配给先前的数组
a = torch.arange(3).reshape((3,1))
b = torch.arange(2).reshape((1,2))
z = torch.zeros_like(a+b)
print(id(z))
z[:] = a+b
print(id(z))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值