动手学深度学习(pytorch)学习记录1-数据操作[学习记录]

注:本代码在jupyter notebook上运行

import torch
# 用arange创建行向量
x = torch.arange(12)
print(x)

在这里插入图片描述

print(x.shape) # 打印张量的形状

在这里插入图片描述

x.numel() # 张量的元素个数

在这里插入图片描述

# 用reshape函数改变张量形状(元素值不会改变)
X = x.reshape(3, 4) # 改变成3行4列的形状
print(x)# 小写x
print(X)# 大写X

在这里插入图片描述

# 也可以用-1调用自动计算维度的功能
X1 = x.reshape(-1, 4)
X2 = x.reshape(3, -1)
print(X1, '\n' ,X2) # reshape的结果和上面一样

在这里插入图片描述

# 创建全0张量 指定形状(2,3,4)
torch.zeros((2, 3, 4))

在这里插入图片描述

# 创建全1张量 指定形状(2,3,4)
torch.ones((2, 3, 4))

在这里插入图片描述

# 从均值为0、标准差为1的正态分布中随机采样创建形状为(3,4)的张量
torch.randn(3,4)

在这里插入图片描述

# 通过python列表为张量元素赋值,最外层列表对应轴0,内层列表对应于轴1
x = torch.tensor([[1,2,3],[4,5,6],[7,8,9]])
print(x)
print(x[2])
print(x[0][0])
print(x[[2]])

在这里插入图片描述

# 简单的按元素运算
x = torch.tensor([1.0, 2, 4, 8])
y = torch.tensor([2, 2, 2, 2])
x + y, x - y, x * y, x / y, x ** y # 加 减 乘 除 求幂

在这里插入图片描述

torch.exp(x)

在这里插入图片描述

# 张量拼接
X = torch.arange(12, dtype=torch.float32).reshape((3,4))
Y = torch.tensor([[2.0, 1, 4, 3], [5, 6, 8, 9], [10, 11, 12, 13]])
torch.cat((X, Y), dim=0), torch.cat((X, Y), dim=1) # 按行拼接、按列拼接

在这里插入图片描述

# 通过逻辑运算构建张量
# 判断张量x和y在对应位置是否相等,若对应位置相等则新张量在该位置值为1,否则为0
X == Y

在这里插入图片描述

# 对张量所有位置求和,产生一个单元素张量
X.sum()

在这里插入图片描述

# 广播机制,通过复制元素扩展数组,使转换后的张量具有相同的形状
# 对生成的数组执行按元素操作
X = torch.arange(3).reshape((3,1))
Y = torch.arange(2).reshape((1,2))
print(X, '\n', Y)
Z = X+Y
print(Z)

在这里插入图片描述

# 索引和切片
Z[-1], Z[1:3] # 最后一个元素,第二个和第三个元素

在这里插入图片描述

# 通过索引将指定元素写入
print(Z)
Z[1,1] = 0
print(Z)

在这里插入图片描述

# 多个元素赋相同的值
Z[:,0] = 6 # :表示所有行,0表示第一个元素,合在一起就是第一列
Z

在这里插入图片描述

# 节省内存问题
before = id(Y)
Y = Y + X
id(Y) == before
Z

在这里插入图片描述

# 这并不是符合我们的期待
# 模型参数巨大,且在短时间内多次更新,我们预期的是原地执行更新
# 不执行原地更新,其他引用会指向旧的内存位置,某些代码可能会无意中引用到旧的参数
# 如何解决:切片表示法
Z = torch.zeros_like(Y)# 创建一个形状像Y的全0矩阵
print("id(Z)", id(Z))
Z[:] = X+Y
print("id(Z)", id(Z))
# 可以发现变量Z实现了原地更新

在这里插入图片描述

# 另一种方法 Z += Y
print("id(Z)", id(Z))
Z += Y
print("id(Z)", id(Z))

在这里插入图片描述

# 转化为其他python对象
A = X.numpy() # tensor转化为NumPy张量(ndarray)
B = torch.tensor(A)# NumPy张量转化为tensor
type(A), type(B)

在这里插入图片描述

# 大小为1的张量转化为Python标量
a = torch.tensor([2.5])
a, a.item(), float(a), int(a)

在这里插入图片描述
所有源码均可下载https://download.csdn.net/download/weixin_50995339/89615342

本人学习地址

欢迎交流学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

walfar

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值