1. NumPy 和 PyTorch Tensor 的格式對比
NumPy 使用的是 numpy.ndarray
,而 PyTorch 使用的是 torch.Tensor
,兩者的格式在數據存儲和計算方式上有所不同。
NumPy (numpy.ndarray
)
import numpy as np
array = np.array([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
print(array.shape) # 輸出: (2, 3)
print(type(array)) # <class 'numpy.ndarray'>
- 存儲格式:數據存儲在 CPU 內存中,默認是
float64
。 - 索引方式:與 Python
list
類似,可以用array[i, j]
訪問元素。 - 操作方式:可以用
np.min(array, axis=0)
計算最小值,支持廣播計算。
PyTorch (torch.Tensor
)
import torch
tensor = torch.tensor([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
print(tensor.shape) # 輸出: torch.Size([2, 3])
print(type(tensor)) # <class 'torch.Tensor'>
- 存儲格式:可以在 CPU 或 GPU(通過
.cuda()
)上存儲,默認是float32
。 - 索引方式:與 NumPy 相同,例如
tensor[i, j]
訪問元素。 - 操作方式:支持
torch.min(tensor, dim=0)
,但也支持梯度計算。
2. NumPy 和 Tensor 主要區別
特性 | NumPy (numpy.ndarray ) | PyTorch (torch.Tensor ) |
---|---|---|
存儲位置 | 僅支持 CPU | 支持 CPU 和 GPU(tensor.cuda() ) |
數據類型 | 默認 float64 | 默認 float32 (更快) |
自動求導 | 不支持 | 支持(requires_grad=True ) |
計算庫 | 只依賴 NumPy | 可用 GPU 加速(CUDA) |
轉換方式 | .astype(np.float32) | .to(torch.float32) |
3. NumPy 和 Tensor 互相轉換
Tensor 轉 NumPy
tensor = torch.tensor([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
array = tensor.numpy() # 轉換為 NumPy
print(type(array)) # <class 'numpy.ndarray'>
? 注意:轉換后的 NumPy 數組和原始 Tensor 共享內存,修改其中一個會影響另一個。
NumPy 轉 Tensor
array = np.array([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
tensor = torch.from_numpy(array) # 轉換為 Tensor
print(type(tensor)) # <class 'torch.Tensor'>
? 注意:轉換后的 Tensor 仍然在 CPU,如果要在 GPU 計算,需要
.to(device)
。
如果 NumPy 數組在 GPU 上使用:
tensor = torch.from_numpy(array).to('cuda')
總結
- NumPy (
numpy.ndarray
) 只在 CPU 上計算,數據格式是float64
,不支持自動求導。 - PyTorch Tensor (
torch.Tensor
) 支持 GPU 加速,默認float32
,可以自動求導。 - 互相轉換:
tensor.numpy()
轉 NumPy(共享內存)。torch.from_numpy(array)
轉 Tensor(仍然在 CPU)。tensor.to('cuda')
讓 Tensor 運行在 GPU 上。