Метод numpy
Метод numpy преобразует тензор PyTorch в массив NumPy.
Важной особенностью является то, что при преобразовании данные
не копируются - тензор и массив разделяют одну область памяти.
Это означает, что изменения в массиве отразятся на тензоре,
и наоборот. Метод не принимает параметров.
Синтаксис
t.numpy()
Пример
Давайте преобразуем тензор в массив NumPy:
import torch
import numpy as np
t = torch.tensor([1, 2, 3, 4, 5])
arr = t.numpy()
print(arr)
Результат выполнения кода:
[1 2 3 4 5]
Пример
Метод numpy работает и с многомерными тензорами:
import torch
import numpy as np
t = torch.tensor([[1, 2, 3], [4, 5, 6]])
arr = t.numpy()
print(arr)
Результат выполнения кода:
[[1 2 3]
[4 5 6]]
Пример
Так как данные не копируются, изменение массива меняет тензор:
import torch
import numpy as np
t = torch.tensor([1, 2, 3, 4, 5])
arr = t.numpy()
arr[0] = 100
print(t)
Результат выполнения кода:
tensor([100, 2, 3, 4, 5])
Пример
Аналогично, изменение тензора меняет массив:
import torch
import numpy as np
t = torch.tensor([1, 2, 3, 4, 5])
arr = t.numpy()
t[1] = 200
print(arr)
Результат выполнения кода:
[ 1 200 3 4 5]
Пример
Следует помнить, что метод numpy работает только с тензорами,
расположенными на CPU. Для тензоров на GPU необходимо сначала
переместить их на CPU методом cpu:
import torch
import numpy as np
t = torch.tensor([1, 2, 3, 4, 5]).cuda()
arr = t.cpu().numpy()
print(arr)
Результат выполнения кода:
[1 2 3 4 5]
Пример
Если тензор требует вычисления градиента, метод numpy
вызовет ошибку. Для преобразования сначала нужно отключить
отслеживание градиента с помощью метода detach:
import torch
import numpy as np
t = torch.tensor([1., 2., 3.], requires_grad=True)
arr = t.detach().numpy()
print(arr)
Результат выполнения кода:
[1. 2. 3.]