Я пытаюсь иметь глубокое понимание того, как работает модель памяти PyTorch Tensor.
# input numpy array
In [91]: arr = np.arange(10, dtype=float32).reshape(5, 2)
# input tensors in two different ways
In [92]: t1, t2 = torch.Tensor(arr), torch.from_numpy(arr)
# their types
In [93]: type(arr), type(t1), type(t2)
Out[93]: (numpy.ndarray, torch.FloatTensor, torch.FloatTensor)
# ndarray 
In [94]: arr
Out[94]: 
array([[ 0.,  1.],
       [ 2.,  3.],
       [ 4.,  5.],
       [ 6.,  7.],
       [ 8.,  9.]], dtype=float32)
  Я знаю, что тензоры PyTorch разделяют буфер памяти NumPy ndarrays. Таким образом, изменение одного будет отражено в другом. Итак, здесь я нарезаю и обновляю некоторые значения в Tensor t2
In [98]: t2[:, 1] = 23.0
  И, как и ожидалось, он обновляется в t2 и arr поскольку они имеют один и тот же буфер памяти.
In [99]: t2
Out[99]: 
  0  23
  2  23
  4  23
  6  23
  8  23
[torch.FloatTensor of size 5x2]
In [101]: arr
Out[101]: 
array([[  0.,  23.],
       [  2.,  23.],
       [  4.,  23.],
       [  6.,  23.],
       [  8.,  23.]], dtype=float32)
  Но  t1 также обновляется. Помните, что t1 был построен с использованием torch.Tensor() тогда как t2 был построен с использованием torch.from_numpy()
In [100]: t1
Out[100]: 
  0  23
  2  23
  4  23
  6  23
  8  23
[torch.FloatTensor of size 5x2]
  Таким образом, независимо от того, используем ли мы  torch.from_numpy() или  torch.Tensor() для построения тензора из ndarray, все такие тензоры и ndarrays используют один и тот же буфер памяти.
 Основываясь на этом понимании, мой вопрос заключается в том, почему функция  torch.from_numpy() существует, когда просто  torch.Tensor() может выполнять задание?
Я посмотрел документацию PyTorch, но в этом ничего не говорится? Любые идеи/предложения?