概述
在手写深度学习神经网络模型过程中,经常面临三种数据类型的互相转化,分别是
- list,列表类型
- numpy.ndarray,numpy数组类型
- torch.tensor,pytorch张量类型
list转numpy.ndarray
直接调用numpy.array(li: list)
即可。
a = [1, 2, 3, 4, 5]
b = np.array(a)
print(type(a), a)
print(type(b), b)
输出:
<class 'list'> [1, 2, 3, 4, 5]
<class 'numpy.ndarray'> [1 2 3 4 5]
numpy.ndarray转list
直接调用numpy.ndarray.tolist()
即可。
a = np.random.rand(2, 2)
b = a.tolist()
print(type(a), a)
print(type(b), b)
输出:
<class 'numpy.ndarray'> [[0.69879659 0.60573637] [0.68410898 0.67192278]]
<class 'list'> [[0.6987965864743525, 0.6057363669169245], [0.6841089820778812, 0.6719227772659302]]
numpy.ndarray转tensor
直接调用torch.tensor(array: numpy.ndarray)
即可。
a = np.random.rand(2, 2)
b = torch.tensor(a)
print(type(a), a)
print(type(b), b)
输出:
<class 'numpy.ndarray'> [[0.03954173 0.76079466] [0.85906081 0.23727305]]
<class 'torch.Tensor'> tensor([[0.0395, 0.7608],
[0.8591, 0.2373]], dtype=torch.float64)
tensor转numpy.ndarray
直接调用tensor.numpy()
即可。
a = torch.rand(size=(2, 2))
b = a.numpy()
print(type(a), a)
print(type(b), b)
输出:
<class 'torch.Tensor'> tensor([[0.1232, 0.1971], [0.1195, 0.9030]])
<class 'numpy.ndarray'> [[0.12315023 0.19711488] [0.11953574 0.90298206]]
list转torch.tensor
直接调用torch.tensor(li: list)
即可。
a = [1, 2, 3, 4, 5]
b = torch.tensor(a)
print(type(a), a)
print(type(b), b)
输出:
<class 'list'> [1, 2, 3, 4, 5]
<class 'torch.Tensor'> tensor([1, 2, 3, 4, 5])
torch.tensor转list
这里需要先将tensor转化为numpy.ndarray,然后再转化为list。即调用tensor.numpy().tolist()
。
a = torch.rand(size=(2, 2))
b = a.numpy().tolist()
print(type(a), a)
print(type(b), b)
输出:
<class 'torch.Tensor'> tensor([[0.3756, 0.4187], [0.1329, 0.6424]])
<class 'list'> [[0.3756064176559448, 0.418671190738678],
[0.13289010524749756, 0.6423724889755249]]