一.前言
本章節我們來講解張量的類型轉換,掌握張量的轉換方法,張量的類型轉換也是經常使?的?種操作,是必須掌握的知識點。在本?節,我們主要學習如何將 numpy 數組和 PyTorch Tensor 的轉化?法.
二.張量轉換為 numpy 數組
使? Tensor.numpy 函數可以將張量轉換為 ndarray 數組,但是共享內存,可以使? copy 函數避免共享。
import torch# 1. 將張量轉換為 numpy 數組
def test01():data_tensor = torch.tensor([2, 3, 4])# 使?張量對象中的 numpy 函數進?轉換data_numpy = data_tensor.numpy()print(type(data_tensor))print(type(data_numpy))# 注意: data_tensor 和 data_numpy 共享內存# 修改其中的?個,另外?個也會發?改變# data_tensor[0] = 100data_numpy[0] = 100print(data_tensor)print(data_numpy)if __name__ == '__main__':test01()
結果展示:
<class 'torch.Tensor'>
<class 'numpy.ndarray'>
tensor([100, ? 3, ? 4])
[100 ? 3 ? 4]?
三.numpy 轉換為張量?
1. 使? from_numpy 可以將 ndarray 數組轉換為 Tensor,默認共享內存,使? copy 函數避免共享。
2. 使? torch.tensor 可以將 ndarray 數組轉換為 Tensor,默認不共享內存。?
import torch
import numpy as np# 1. 使? from_numpy 函數
def test01():data_numpy = np.array([2, 3, 4])# 將 numpy 數組轉換為張量類型# 1. from_numpy# 2. torch.tensor(ndarray)# 淺拷?data_tensor = torch.from_numpy(data_numpy)# nunpy 和 tensor 共享內存# data_numpy[0] = 100data_tensor[0] = 100print(data_tensor)print(data_numpy)# 2. 使? torch.tensor 函數
def test02():data_numpy = np.array([2, 3, 4])data_tensor = torch.tensor(data_numpy)# nunpy 和 tensor 不共享內存# data_numpy[0] = 100data_tensor[0] = 100print(data_tensor)print(data_numpy)if __name__ == '__main__':test01()test02()
?結果展示:
tensor([100, ? 3, ? 4])
[100 ? 3 ? 4]
tensor([100, ? 3, ? 4])
[2 3 4]
四.標量張量和數字的轉換?
對于只有?個元素的張量,使? item ?法將該值從張量中提取出來。
import torch# 3. 標量張量和數字的轉換
def test03():# 當張量只包含?個元素時, 可以通過 item 函數提取出該值data = torch.tensor([30, ])print(data.item())data = torch.tensor(30)print(data.item())if __name__ == '__main__':test03()
結果展示:
30
30?
五.總結
在本?節中, 我們主要學習了 numpy 和 tensor 互相轉換的規則, 以及標量張量與數值之間的轉換規則。?
?
?
?