05线性代数

点击查看代码
import torch

# 标量
# 标量由只有一个元素的张量表示
x = torch.tensor(3.0)
y = torch.tensor(2.0)
print(x + y, x * y, x ** y)

# 向量
# 标量值组成的列表
x = torch.arange(4)
print(x)
# 通过张量的索引来访问任一元素
print(x[2])
# 长度、维度和形状
print(len(x))
print(x.shape)

# 矩阵
# 通过指定两个分量 𝑚 和 𝑛 来创建一个形状为 𝑚×𝑛 的矩阵
A = torch.arange(20).reshape(5, -1)
print(A)
# 矩阵的转置
print(A.T)
# 对称矩阵(symmetric matrix) 𝐀 等于其转置: 𝐀=𝐀⊤
B = torch.tensor([
    [1, 2, 3],
    [2, 4, 5],
    [3, 5, 6]
])
print(B == B.T)

# 张量
X = torch.arange(36).reshape(3, 4, -1)
print(X)
# 给定具有相同形状的任意两个张量,任何按元素二元运算的结果都将是相同形状的张量
A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
# 通过分配新内存,将A的一个副本分配给B
B = A.clone()
print(id(A), id(B))
print(A + B)

# 降维
# 指定张量沿哪一个轴来通过求和降低维度
print(A)
A_sum_axis0 = A.sum(axis=0)
print(A_sum_axis0)
print(A_sum_axis0.shape)
A_sum_axis0 = A.sum(axis=1)
print(A_sum_axis0)
print(A_sum_axis0.shape)
# 沿着行和列对矩阵求和,等价于对矩阵的所有元素进行求和。
A_sum_axis0 = A.sum(axis=[0, 1])
print(A_sum_axis0)
print(A_sum_axis0.shape)
# 平均值
print(A.mean(), A.sum() / A.numel())
# 计算平均值的函数也可以沿指定轴降低张量的维度
print(A.mean(axis=0), A.sum(axis=0) / A.shape[0])
print(A.mean(axis=1), A.sum(axis=1) / A.shape[1])

# 非降维求和
# 计算总和或均值时保持轴数不变
sum_A = A.sum(axis=1, keepdims=True)
print(sum_A)
# 通过广播将A除以sum_A
print(A / sum_A)
# 某个轴计算A元素的累积总和
print(A.cumsum(axis=0))

# 点积
# 相同位置的按元素乘积的和
x = torch.arange(4, dtype=torch.float32)
print(x)
y = torch.ones(4, dtype=torch.float32)
print(y)
print(torch.dot(x, y))
# 可以通过执行按元素乘法,然后进行求和来表示两个向量的点积
print(torch.sum(x * y))

# 矩阵-向量积
# A的列维数(沿轴1的长度)必须与x的维数(其长度)相同
print(A.shape)
print(x.shape)
print(torch.mv(A, x))

# 矩阵-矩阵乘法
B = torch.ones(4, 3)
print(A)
print(B)
print(torch.mm(A, B))

# 范数
# L2范数
u = torch.tensor([3.0 , -4.0])
print(torch.norm(u))
# L1范数
print(torch.abs(u).sum())

posted @   荒北  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示