pytorch 1 torch_numpy, 对比

时间:2022-04-27 21:23:43
import torch
import numpy as np

details about math operation in torch can be found in: http://pytorch.org/docs/torch.html#math-operations

convert numpy to tensor or vise versa

# convert numpy to tensor or vise versa
np_data = np.arange(6).reshape((2, 3)) 
torch_data = torch.from_numpy(np_data)  # np转成torch
tensor2array = torch_data.numpy()       # torch转成np
print(
    '\nnumpy array:', np_data,           # [[0 1 2] [3 4 5]]
    '\ntorch tensor:', torch_data,       # tensor([[0, 1, 2], [3, 4, 5]])
    '\ntensor to array:', tensor2array,  # [[0 1 2], [3 4 5]]
)

abs 绝对值

# abs
data = [-1, -2, 1, 2]
tensor = torch.FloatTensor(data)  # 32-bit floating point
print(
    '\nabs',
    '\nnumpy: ', np.abs(data),          # [1 2 1 2]
    '\ntorch: ', torch.abs(tensor)      # tensor([1., 2., 1., 2.])
)

sin 正弦值

# sin
print(
    '\nsin',
    '\nnumpy: ', np.sin(data),      # [-0.84147098 -0.90929743  0.84147098  0.90929743]
    '\ntorch: ', torch.sin(tensor)  # tensor([-0.8415, -0.9093,  0.8415,  0.9093])
)

mean 均值

# mean 
print(
    '\nmean',
    '\nnumpy: ', np.mean(data),         # 0.0
    '\ntorch: ', torch.mean(tensor)     #  tensor(0.)
)

matrix multiplication 矩阵乘法

# matrix multiplication
data = [[1, 2], [3, 4]]
tensor = torch.FloatTensor(data)  # 32-bit floating point
# correct method
print(
    '\nmatrix multiplication (matmul)',
    '\nnumpy: ', np.matmul(data, data),     # [[7, 10], [15, 22]]
    '\ntorch: ', torch.mm(tensor, tensor)   # tensor([[ 7., 10.], [15., 22.]])
)

incorrect method 不正确的方法

```

incorrect method

data = np.array(data)
print(
'\nmatrix multiplication (dot)',
'\nnumpy: ', data.dot(data), # [[7, 10], [15, 22]]
'\ntorch: ', tensor.dot(tensor) # this will convert tensor to [1,2,3,4], you'll get 30.0, RuntimeError: dot: Expected 1-D argument self, but got 2-D
)