我是这样记忆的。
背景知识:
- “列”是向量的默认方向;
- 矩阵是向量的容器,二维矩阵的每列都可视为向量;
于是,0 维(dim=0
)表示向量的每个元素所在方向,1 维(dim=1
)表示矩阵的每个元素(即,向量)所在方向,以此类推。
我是这样记忆的。
背景知识:
于是,0 维(dim=0
)表示向量的每个元素所在方向,1 维(dim=1
)表示矩阵的每个元素(即,向量)所在方向,以此类推。
hw 1-3在论坛不太好表示,一种简单的证明方法是跟踪每个元素a_ij经过转置运算或者其它运算后的位置变化,或者在计算机中随机生成一个tensor以证明,正规的证明方式是借助辅助符号,改天补上(肚子好饿
# homework 4
x = torch.arange(24).reshape(2, 3, 4)
len(x)
# output is 2
# hw 5
x = torch.arange(24).reshape(4, 6)
len(x)
# 是的,经过样例,作业4和作业5我的试验,发现至少对于1,2,3维的tensor都是如此
# hw 6
A, A.sum(dim=1) # error: A/A.sum(dim=1) : The size of tensor a (4) must match the size of tensor b (5) at non-singleton dimension 1
# 根据报错信息,在维度1(从0开始),第二个tensor维度比第一个tensor的维度大(递增了),导致错误,第一个tensor是5*4的,第二个是1*5的,都是二维tensor,可能在这种情况下无法使用广播机制
# hw 7
x = torch.arange(24).reshape(2, 3, 4)
x, x.sum(dim=0).shape, x.sum(dim=0), x.sum(dim=1).shape, x.sum(dim=1), x.sum(dim=2).shape, x.sum(dim=2)
# dim 0: 3 * 4; dim 1: 2 * 4; dim 2: 2 * 3
# 理解:沿着哪个dim,就把这个dim方向上的数加在一起拍扁,并且维数也降了一维,可以画图理解
# hw 8
import numpy
numpy.linalg.norm(x), torch.sqrt(torch.sum(x * x))
# 对比发现,类似于二维矩阵的2-范数,这是tensor的2-范数
我的理解 axis=0 就是把最外层的看成一个向量,axis=1 级别的都设成一个变量 x
[x1,x2,…xn],
axis=1 就是把第二层数组内的元素看成一个变量
[
[x11, x12, …x1n],
[x21, x22, …x2n],
]
x可以是标量或者任意张量
以此类推
A/A.sum(axis=1)
怎么才能广播,使其可以进行计算呢