一、numpy和torch的简单介绍
1、numpy系统是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,numpy会把array放在CPU中加速运算。
2、Torch自称为神经网络中的numpy。它会将torch产生的tensor放在GPU中加速运算。PyTorch是一个开源的Python机器学习库,基于Torch,用于自然语言处理等应用程序。
二、numpy和torch的转换
# 本文所需头文件
import torch
import numpy as np
np_data = np.arange(6).reshape((2,3)) # 将数组转换成2行3列的形式
torch_data = torch.from_numpy(np_data) # numpy 转换成 torch
tensor_to_array = torch_data.numpy() # torch 转换成 numpy
print(
'---numpy---\n',np_data,
'\n---torch---\n',torch_data,
'\n---tensor_to_array---\n',tensor_to_array,
)
输出结果:
---numpy---
[[0 1 2]
[3 4 5]]
---torch---
tensor([[0, 1, 2],
[3, 4, 5]], dtype=torch.int32)
---tensor_to_array---
[[0 1 2]
[3 4 5]]
Process finished with exit code 0
三、numpy和torch的部分数学计算
np_data1 = [-1,-2,-3,4]
torch_data1 = torch.FloatTensor(np_data1) # 转换成32位浮点 tensor
print(
'\n---numpy--abs--\n', np.abs(np_data1), # abs 计算绝对值
'\n---torch---abs--\n',torch.abs(torch_data1),
'\n\n---numpy--mean--\n', np.mean(np_data1), # mean 计算平均值
'\n---torch---mean--\n',torch.mean(torch_data1),
'\n\n---numpy--sin--\n', np.sin(np_data1), # sin 计算正弦值
'\n---torch---sin--\n',torch.sin(torch_data1),
)
输出结果:
---numpy--abs--
[1 2 3 4]
---torch---abs--
tensor([1., 2., 3., 4.])
---numpy--mean--
-0.5
---torch---mean--
tensor(-0.5000)
---numpy--sin--
[-0.84147098 -0.90929743 -0.14112001 -0.7568025 ]
---torch---sin--
tensor([-0.8415, -0.9093, -0.1411, -0.7568])
Process finished with exit code 0
四、numpy和torch的矩阵运算
#matrix_multiply
np_data2 = [[1,2],[3,4]]
torch_data2 = torch.FloatTensor(np_data2)
print(
'\nnumpy\n',np.matmul(np_data2,np_data2), # 计算矩阵乘法
'\ntorch\n',torch.mm(torch_data2,torch_data2),
)
#matrix_dot
np_data2 = [1,2,3,4]
torch_data2 = torch.FloatTensor(np_data2)
np_data2 = np.array(np_data2)
print(
'\nnumpy\n',np_data2.dot(np_data2), # [[7, 10], [15, 22]] 在numpy 中可行
'\ntorch\n',torch.dot(torch_data2,torch_data2) # torch 会转换成 [1,2,3,4].dot([1,2,3,4) = 30.0
)
输出结果:
---numpy---
[[ 7 10]
[15 22]]
---torch---
tensor([[ 7., 10.],
[15., 22.]])
---numpy---
30
---torch---
tensor(30.)
Process finished with exit code 0
注释:使用dot函数运算后结果为30的原因是:1×1+2×2+3×3+4×4 = 30;