Функция PyTorch torch.expand


Pytorch torch 参考手册Справочное руководство 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)

Вывод:

原始张量:
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)

Вывод:

原始: 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)

Вывод:

列向量形状: 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])

Вывод:

原始形状: 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.


Pytorch torch 参考手册Pytorch torch Reference Manual