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)))
10-17
5139
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)