Функция linalg.vector_norm
Функция linalg.vector_norm вычисляет векторную норму для входного тензора.
В отличие от norm, эта функция специализируется именно на векторных нормах
и предоставляет более гибкий контроль над вычислениями. Первым параметром
передается тензор, вторым - порядок нормы (по умолчанию 2 для евклидовой нормы).
Также можно указать размерность, вдоль которой вычисляется норма, и
сохранять ли размерность в выходном тензоре.
Синтаксис
torch.linalg.vector_norm(input, ord=2, dim=None, keepdim=False, dtype=None)
Пример
Вычислим евклидову норму (порядок 2) для одномерного вектора:
import torch
t = torch.tensor([3.0, 4.0])
res = torch.linalg.vector_norm(t)
print(res)
Результат выполнения кода:
tensor(5.)
Пример
Вычислим манхэттенскую норму (порядок 1) для того же вектора:
import torch
t = torch.tensor([3.0, -4.0])
res = torch.linalg.vector_norm(t, ord=1)
print(res)
Результат выполнения кода:
tensor(7.)
Пример
Вычислим норму для пакета векторов, указав размерность:
import torch
t = torch.tensor([
[1.0, 2.0, 3.0],
[4.0, 5.0, 6.0],
])
res = torch.linalg.vector_norm(t, dim=1)
print(res)
Результат выполнения кода:
tensor([3.7417, 8.7750])
Пример
Используем параметр keepdim для сохранения размерности:
import torch
t = torch.tensor([
[1.0, 2.0],
[3.0, 4.0],
])
res = torch.linalg.vector_norm(t, dim=1, keepdim=True)
print(res)
Результат выполнения кода:
tensor([
[2.2361],
[5.0000],
])
Пример
Вычислим норму с явным указанием типа данных dtype:
import torch
t = torch.tensor([1, 2, 3], dtype=torch.float)
res = torch.linalg.vector_norm(t, dtype=torch.float64)
print(res.dtype)
print(res)
Результат выполнения кода:
torch.float64
tensor(3.7417, dtype=torch.float64)
Смотрите также
-
функцию
norm,
которая вычисляет общую норму для тензоров -
функцию
matrix_norm,
которая вычисляет матричную норму -
функцию
svd,
которая раскладывает матрицу на сингулярные числа -
функцию
qr,
которая выполняет QR-разложение матрицы