Numpy/Pytorch之数据类型与强制转换 总结

Numpy/Pytorch之数据类型与强制转换 总结

禁止转载!!!

numpy的数据创建和类型转换

① 用一维列表创建

import numpy as np
np.array([1,2,3])

② 用元组创建

np.array((1,2,3))

③ 创建多维数组

np.array( [ [ 1, 2, 3, 4 ], [ 5, 6, 7, 8 ] ] )

④通过zeros创建数组 创建一个元素为0的数组

np.zeros(3) #生成一维矩阵 np.zeros((3,3)) #生成二维矩阵 np.zeros(((2,3,4))) #生成三维矩阵

⑤ones 生成元素为1的数组

np.ones((3, 3)) 左行右列,三行三列

⑥empty生成未初始化数组

np.empty((2,2))

此外,还可以产生与现有矩阵相同形状的矩阵:

np.zeros_like(a) np.ones_like(a) np.empty_like(a) #a为现有的矩阵

numpy的数据类型: dtype属性

Python的type()函数:返回的是变量类型,而 非数据类型。如:a.type() type(a)
使用dtype不仅可以查看其数据类型,还可以设置其数据类型:

a=np.array((1,2,3))
a.dtype
a=np.array((1,2,3),dtype=float)
a.dtype

a=np.array(a,dtype=np.int8)
a.dtype

利用.astype()方法也行

a=a.astype(np.int16)
a.dtype #dtype('int16')

NumPy 支持比 Python 更多种类的数值类型。 下表显示了 NumPy 中定义的不同标量数据类型。
注意!!!! python中没有int8 所以必须用np.int8 其他同理。

Numpy/Pytorch之数据类型与强制转换 总结

Torch的数据创建和类型转换

1.利用torch.tensor来创建
①一维列表创建 用元组创建 多维数组 (类似于numpy.array())

import torch
torch.tensor([1,2,3])
torch.tensor((1,2,3))
torch.tensor( [ [ 1, 2, 3, 4 ], [ 5, 6, 7, 8 ] ] )

②通过zeros创建数组 创建元素为0的 生成元素为1的 生成未初始化的 (类似于numpy)

torch.zeros(3) #生成一维矩阵 torch.zeros((3,3)) #生成二维矩阵 torch.zeros(((2,3,4))) #生成三维矩阵
torch.ones((3, 3)) 左行右列,三行三列
torch.empty((2,2))

此外,还可以产生与现有矩阵相同形状的矩阵: (类似于numpy,除torch.full_like)

torch.zeros_like(a) torch.ones_like(a) torch.empty_like(a) torch.full_like(a,full_like_value) #a为现有的矩阵

2.利用torch.Tensor来创建 (与numpy不同)
大写的Tensor是用来接收shape的,不过也可以接受list数据,建议用tensor接受list数据,Tensor接收Shape。(注意:未初始化的张量数据特别大或者特别小,如果后面不赋值替换,那么容易出错/网络收敛不够好。)

b=torch.Tensor(1,2,2)
b.size()

b=torch.FloatTensor(1,2,2)
b.dtype

Torch的数据类型:
😃 既然前面都和numpy神似,那么dtype的用法也当然是神似了: 😃

a=torch.tensor((1,2,3))
a.dtype
a=torch.tensor((1,2,3),dtype=float)
a.dtype

数据类型转换:(这里是numpy有些差别)

  1. a.int(), a.long(), a.short(), a.float(), a.double(), a.half(), a.char(), a.byte() 进行转化
a = torch.tensor([1.3,4.6])
b = a.byte()
  1. 使用torch.type()函数, 直接输入需要转化成的类型 (类似np.astype())
a = torch.tensor([1.3,4.6])
b = a.type(torch.short)
a = a.type(torch.short)
  1. 使用type_as() 函数, 该函数的作用是将该tensor的类型转化成另一个tensor的类型
a = torch.tensor([1.3,4.6])
b = torch.tensor([2,4],dtype=torch.short)
c = a.type_as(b)

在torch中CPU和GPU张量分别有8种数据类型, GPU tensor比CPU tensor多了.cuda

Numpy/Pytorch之数据类型与强制转换 总结

Numpy和Torch之间相互转换

前面介绍完,各自内部的数据转换,现在介绍一下两者相互的数据转换。

1.利用专门设计的函数,进行转换:

注意,转换后的tensor与numpy指向同一地址,对一方的值改变另一方也随之改变!!!

tensor转numpy:

a = torch.ones(3)
b = a.numpy()
a.add_(1.)
print('a:',a)
print('b:',b)

a: tensor([2., 2., 2.]) #跟着改变了
b: [2. 2. 2.]

numpy转tensor:

a = np.ones(5)
b = torch.from_numpy(a)

2.直接利用数据创建矩阵(不能称为类型转换,是新建数据):

创建的数据与原数据不是同一地址的数据!!!
tensor转numpy:

a = torch.tensor([1,1])
b=np.array(a)
a.add_(1)
print('a:',a)
print('b:',b)

b=np.array(a,dtype=np.int8)

numpy转tensor:

a=np.array([1.,1.])
b=torch.tensor(a,dtype=torch.int8)
c=torch.Tensor(a)

Numpy/Pytorch之数据类型与强制转换 总结
torch.ones_like(a)这种特殊创建方法,不能进行创建。
TypeError:`ones_like(): argument 'input' (position 1) must be Tensor, not numpy.ndarray
但是,np.ones_like(a)是可以的:
a=torch.tensor([1,1],dtype=float)
b=np.ones_like(a)

总之,两者在使用上有很大的相似之处,细微的差别可以对比记忆。大方向上,torch都是依照着numpy来设计的,并为了便于深度学习的计算加入了很多新方法和属性。
欢迎留言交流,but禁止转载!!!

Original: https://blog.csdn.net/qq_41917697/article/details/116014548
Author: 球场书生
Title: Numpy/Pytorch之数据类型与强制转换 总结

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/763191/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球