Tensors
PyTorch中的Tensor跟numpy有些類似,唯一的不同是Tensor可以用GPU來加速。
from __future__ import print_function
import torch
#構造一個5x3的未初始化的矩陣
x = torch.Tensor(5, 3)
print(x)
輸出爲
1.00000e-09 *
0.0000 0.0000 0.0000
0.0000 0.0000 0.0000
0.0000 0.0000 0.0000
0.0000 0.0000 0.0000
9.3205 0.0000 0.0000
[torch.FloatTensor of size 5x3]
#構造一個隨機初始化的5x3矩陣
x = torch.rand(5, 3)
print(x)
輸出爲
0.2740 0.7611 0.0370
0.2084 0.1229 0.3123
0.8801 0.7394 0.4909
0.6665 0.5233 0.0326
0.3259 0.9744 0.7803
[torch.FloatTensor of size 5x3]
Operations
加法語法一
y = torch.rand(5, 3)
print(x + y)
輸出爲
1.2185 0.9737 0.4021
0.5037 0.9819 1.1197
1.7124 1.4830 0.8523
1.3717 0.6566 0.3655
0.3880 1.9364 1.3280
[torch.FloatTensor of size 5x3]
加法語法二
print(torch.add(x, y))
輸出爲
1.2185 0.9737 0.4021
0.5037 0.9819 1.1197
1.7124 1.4830 0.8523
1.3717 0.6566 0.3655
0.3880 1.9364 1.3280
[torch.FloatTensor of size 5x3]
加法結果賦給新變量
result = torch.Tensor(5, 3)
torch.add(x, y, out=result)
print(result)
輸出爲
1.2185 0.9737 0.4021
0.5037 0.9819 1.1197
1.7124 1.4830 0.8523
1.3717 0.6566 0.3655
0.3880 1.9364 1.3280
[torch.FloatTensor of size 5x3]
加法in-place操作
# adds x to y
y.add_(x)
print(y)
輸出爲
1.2185 0.9737 0.4021
0.5037 0.9819 1.1197
1.7124 1.4830 0.8523
1.3717 0.6566 0.3655
0.3880 1.9364 1.3280
[torch.FloatTensor of size 5x3]
取某一維的數據可以跟matlab一樣
print(x[:, 1])
輸出爲
0.7611
0.1229
0.7394
0.5233
0.9744
[torch.FloatTensor of size 5]
Numpy Bridge
將numpy矩陣與Tensor之間的轉化是十分方便的。
Converting torch Tensor to numpy Array
a = torch.ones(5)
print(a)
輸出爲
1
1
1
1
1
[torch.FloatTensor of size 5]
b = a.numpy()
print(b)
輸出爲
[1. 1. 1. 1. 1.]
a.add_(1)
print(a)
print(b)
輸出爲
2
2
2
2
2
[torch.FloatTensor of size 5]
[2. 2. 2. 2. 2.]
可以看到,numpy矩陣和Tensor的數據都發生了變化,也就是說它們是共用一塊內存的。
Converting numpy Array to torch Tensor
import numpy as np
a = np.ones(5)
b = torch.from_numpy(a)
np.add(a, 1, out=a)
print(a)
print(b)
輸出爲
[2. 2. 2. 2. 2.]
2
2
2
2
2
[torch.DoubleTensor of size 5]
同樣,改變numpy矩陣的值,Tensor的值也會發生變化,即numpy矩陣和Tensor共用同一塊內存。