Функция PyTorch torch.expand
Справочное руководство Pytorch torchСправочное руководство Pytorch torch
torch.expandЭто функция в PyTorch, используемая для расширения размерностей тензора. Она расширяет тензор, дублируя представление без фактического копирования данных.
Расширенный тензор разделяет исходные данные как представление в памяти, что делает эту операцию эффективной по памяти.
Определение функции
torch.expand(*sizes) torch.expand(input, *sizes)
Parameters:
input(Tensor): Входной тензор.*sizes(torch.Size или int): Целевой размер. Одно измерение в размере может быть -1, что означает, что это измерение остаётся неизменным. Измерения со значением 1 можно расширять до больших размеров.
Возвращаемое значение:
torch.Tensor: Возвращает расширенное представление тензора.
Примеры использования
Пример
import torch
# Создать тензор с размерностью 1
x = torch.tensor([[1], [2], [3]])
print("Исходный тензор:")
print(x)
print("Форма:", x.shape)
# Расширить до большего размера
y = x.expand(3, 4)
print("nПосле расширения:")
print(y)
print("Форма:", y.shape)
# Создать тензор с размерностью 1
x = torch.tensor([[1], [2], [3]])
print("Исходный тензор:")
print(x)
print("Форма:", x.shape)
# Расширить до большего размера
y = x.expand(3, 4)
print("nПосле расширения:")
print(y)
print("Форма:", y.shape)
Вывод:
原始张量:
tensor([[1],
[2],
[3]])
形状: torch.Size([3, 1])
扩展后:
tensor([[1, 1, 1, 1],
[2, 2, 2, 2],
[3, 3, 3, 3]])
形状: torch.Size([3, 4])
Пример
import torch
# Использовать -1, чтобы сохранить размерность неизменной
x = torch.tensor([1, 2, 3, 4])
# Расширить до тензора 2x4
y = x.expand(2, -1)
print("Исходный:", x.shape)
print("После расширения:", y.shape)
print(y)
# Использовать -1, чтобы сохранить размерность неизменной
x = torch.tensor([1, 2, 3, 4])
# Расширить до тензора 2x4
y = x.expand(2, -1)
print("Исходный:", x.shape)
print("После расширения:", y.shape)
print(y)
Вывод:
原始: torch.Size([4])
扩展后: torch.Size([2, 4])
tensor([[1, 2, 3, 4],
[1, 2, 3, 4]])
Пример
import torch
# Пример использования механизма broadcasting
# Расширить вектор-столбец до матрицы
column = torch.randn(5, 1)
# Расширить для сложения с матрицей
matrix = torch.randn(5, 10)
# Бродкастинг: вектор-столбец автоматически расширяется
result = matrix + column
print("Форма вектора-столбца:", column.shape)
print("Форма матрицы:", matrix.shape)
print("Форма результата:", result.shape)
# Пример использования механизма broadcasting
# Расширить вектор-столбец до матрицы
column = torch.randn(5, 1)
# Расширить для сложения с матрицей
matrix = torch.randn(5, 10)
# Бродкастинг: вектор-столбец автоматически расширяется
result = matrix + column
print("Форма вектора-столбца:", column.shape)
print("Форма матрицы:", matrix.shape)
print("Форма результата:", result.shape)
Вывод:
列向量形状: torch.Size([5, 1]) 矩阵形状: torch.Size([5, 10]) 结果形状: torch.Size([5, 10])
Пример
import torch
# Расширить 2D-тензор до 3D
x = torch.tensor([[1, 2, 3],
[4, 5, 6]])
# Расширить третье измерение
y = x.expand(2, 2, 3)
print("Исходная форма:", x.shape)
print("Расширенная форма:", y.shape)
print("nРасширенный тензор:")
print(y)
# Проверить, что данные являются общими
print("nИзменённый исходный тензор:")
x[0, 0] = 100
print("x[0,0]:", x[0, 0])
print("y[0,0,0]:", y[0, 0, 0])
# Расширить 2D-тензор до 3D
x = torch.tensor([[1, 2, 3],
[4, 5, 6]])
# Расширить третье измерение
y = x.expand(2, 2, 3)
print("Исходная форма:", x.shape)
print("Расширенная форма:", y.shape)
print("nРасширенный тензор:")
print(y)
# Проверить, что данные являются общими
print("nИзменённый исходный тензор:")
x[0, 0] = 100
print("x[0,0]:", x[0, 0])
print("y[0,0,0]:", y[0, 0, 0])
Вывод:
原始形状: torch.Size([2, 3])
扩展后形状: torch.Size([2, 2, 3])
扩展后的张量:
tensor([[[1, 2, 3],
[4, 5, 6]],
[[1, 2, 3],
[4, 5, 6]]])
修改原始张量:
x[0,0]: tensor(100)
y[0,0,0]: tensor(100)
Note:torch.expandOnly dimensions with a size of 1 can be expanded to larger sizes. Dimensions larger than 1 cannot be shrunk or expanded to different sizes. A view is returned, not a copy.