Pen*_*uin 3 python vector pytorch
我有一个矩阵:
\nt = torch.rand(2,3)\nprint(t)\n>>>tensor([[0.5164, 0.3651, 0.0882],\n [0.4488, 0.9824, 0.4067]])\nRun Code Online (Sandbox Code Playgroud)\n我正在关注这个规范简介,并想在 PyTorch 中尝试一下。
\n看起来像:
\nnorm向量的大小或长度是一个非负数,描述向量在空间中的范围,有时称为向量\xe2\x80\x99s 大小或范数”1-Norm是“绝对向量值的总和,其中标量的绝对值使用符号 |a1|。实际上,范数是距向量空间原点的曼哈顿距离的计算。”2-Norm是“向量坐标距向量空间原点的距离。L2 范数计算为向量值平方和的平方根。”我目前只知道这个:
\nprint(torch.linalg.norm(t, dim=1))\n>>>tensor([0.6385, 1.1541])\nRun Code Online (Sandbox Code Playgroud)\n但我无法从这里弄清楚三个(范数,1-范数,2-范数)中的哪一个计算出这三个(范数、1-范数、2-范数)中的哪一个,以及如何计算其余的
\nIva*_*van 15
要计算 0-、1-和 2-范数,您可以使用torch.linalg.norm,并分别提供ord参数(0、1和2)。或者直接在张量上:Tensor.norm,带有p参数。以下是三个变体:手动计算、使用torch.linalg.norm和 使用Tensor.norm。
0-范数
>>> x.norm(dim=1, p=0)
>>> torch.linalg.norm(x, dim=1, ord=0)
>>> x.ne(0).sum(dim=1)
Run Code Online (Sandbox Code Playgroud)
1-范数
>>> x.norm(dim=1, p=1)
>>> torch.linalg.norm(x, dim=1, ord=1)
>>> x.abs().sum(dim=1)
Run Code Online (Sandbox Code Playgroud)
2-范数
>>> x.norm(dim=1, p=2)
>>> torch.linalg.norm(x, dim=1, ord=2)
>>> x.pow(2).sum(dim=1).sqrt()
Run Code Online (Sandbox Code Playgroud)