深度学习之线性代数代码部分

import torch

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

print(x + y, x * y, x / y, x**y)

# 向量就是标量组成的列表
x = torch.arange(4)
print(x)
print(x[3])

# 访问张量的长度以及形状
print(len(x))
print(x.shape)

# 指定两个分量m,n来创建一个形状为m*n的矩阵
A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
print(A)

# 矩阵的转置
print(A.T)

# 对称矩阵A等于其转置
B = torch.tensor([[1, 2, 3], [2, 0, 4], [3, 4, 5]])
print(B)

print(B == B.T)

# 两个矩阵的按元素乘法叫哈达玛积
B = A.clone()
print(A*B)
X = torch.arange(24, dtype=torch.float32).reshape(2, 3, 4)
a = 2
print(a + X, (a*X).shape)
print(A.sum())

# 指定求和汇总张量的轴
Y = torch.arange(40.0).reshape(2, 5, 4)
print(Y)

# torch.Size([2, 5, 4])
# 分别对应轴    0  1  2
Y_sum_axis0 = Y.sum(axis=0)
# 对序号为0的轴求和,得到的矩阵的size为(5,4)
print(Y_sum_axis0)
Y_sum_axis1 = Y.sum(axis=1)
# 对序号为1的轴求和,得到的矩阵的size为(2,4)
print(Y_sum_axis1)
# 前面两个轴相加,因为是一个三维数组,所以得到的是一个向量
print(Y.sum(axis=[0, 1]))
# 求平均值
print(Y.sum()/Y.numel(), Y.mean())
print(Y.mean(axis=0))
print(Y.sum(axis=0)/Y.shape[0])

# sum(axis=0)会减少矩阵的维度 keepdims=True使得计算总和均值时轴数不变,才可使用广播机制
sum_Y = Y.sum(axis=0, keepdims=True)
print(sum_Y)
print(Y)
print(Y / sum_Y)

# 累加 eg.按行/列累加,第二行等于第一行加第二行
print(Y.cumsum(axis=0))

# 向量的点积
N = torch.tensor([0.0, 1, 2, 3])
M = torch.ones(4, dtype=torch.float32)
print(torch.dot(N, M))

print(A)

# 矩阵和向量相乘,在pytorch中此时向量为列向量,若要讨论size是[1,4]还是[4,1]则讨论的是矩阵
print(A.shape)
a = torch.tensor([1.0, 2, 3, 4])
print(a.shape)
print(torch.mv(A, a))

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

# 向量的范数
# L2范数:向量元素平方和开根号
u = torch.tensor([3.0, -4.0])
print(torch.norm(u))

# L1范数:对向量中的元素取绝对值求和
print(torch.abs(u).sum())

# 矩阵的范数
# Frobenius范数:矩阵元素平方和的平方根
print(torch.norm(torch.ones(4, 9)))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值