pytorch: tensor类型的构建与相互转换

Summary

主要包括以下三种途径:

  1. 使用独立的函数;
  2. 使用torch.type()函数;
  3. 使用type_as(tesnor)将张量转换为给定类型的张量。

使用独立函数

import torch

tensor = torch.randn(3, 5)
print(tensor)

# torch.long() 将tensor投射为long类型
long_tensor = tensor.long()
print(long_tensor)

# torch.half()将tensor投射为半精度浮点类型
half_tensor = tensor.half()
print(half_tensor)

# torch.int()将该tensor投射为int类型
int_tensor = tensor.int()
print(int_tensor)

# torch.double()将该tensor投射为double类型
double_tensor = tensor.double()
print(double_tensor)

# torch.float()将该tensor投射为float类型
float_tensor = tensor.float()
print(float_tensor)

# torch.char()将该tensor投射为char类型
char_tensor = tensor.char()
print(char_tensor)

# torch.byte()将该tensor投射为byte类型
byte_tensor = tensor.byte()
print(byte_tensor)

# torch.short()将该tensor投射为short类型
short_tensor = tensor.short()
print(short_tensor)
-0.5841 -1.6370  0.1353  0.6334 -3.0761
-0.2628  0.1245  0.8626  0.4095 -0.3633
 1.3605  0.5055 -2.0090  0.8933 -0.6267
[torch.FloatTensor of size 3x5]


 0 -1  0  0 -3
 0  0  0  0  0
 1  0 -2  0  0
[torch.LongTensor of size 3x5]


-0.5840 -1.6367  0.1353  0.6333 -3.0762
-0.2627  0.1245  0.8628  0.4094 -0.3633
 1.3604  0.5054 -2.0098  0.8936 -0.6265
[torch.HalfTensor of size 3x5]


 0 -1  0  0 -3
 0  0  0  0  0
 1  0 -2  0  0
[torch.IntTensor of size 3x5]


-0.5841 -1.6370  0.1353  0.6334 -3.0761
-0.2628  0.1245  0.8626  0.4095 -0.3633
 1.3605  0.5055 -2.0090  0.8933 -0.6267
[torch.DoubleTensor of size 3x5]


-0.5841 -1.6370  0.1353  0.6334 -3.0761
-0.2628  0.1245  0.8626  0.4095 -0.3633
 1.3605  0.5055 -2.0090  0.8933 -0.6267
[torch.FloatTensor of size 3x5]


 0 -1  0  0 -3
 0  0  0  0  0
 1  0 -2  0  0
[torch.CharTensor of size 3x5]


   0  255    0    0  253
   0    0    0    0    0
   1    0  254    0    0
[torch.ByteTensor of size 3x5]


 0 -1  0  0 -3
 0  0  0  0  0
 1  0 -2  0  0
[torch.ShortTensor of size 3x5]

其中,torch.Tensortorch.randtorch.randn 均默认生成 torch.FloatTensor型

import torch

tensor = torch.Tensor(3, 5)
assert isinstance(tensor, torch.FloatTensor)

tensor = torch.rand(3, 5)
assert isinstance(tensor, torch.FloatTensor)

tensor = torch.randn(3, 5)
assert isinstance(tensor, torch.FloatTensor)

使用torch.type()函数

type(new_type=None, async=False)

import torch

tensor = torch.randn(3, 5)
print(tensor)

int_tensor = tensor.type(torch.IntTensor)
print(int_tensor)
-0.4449  0.0332  0.5187  0.1271  2.2303
 1.3961 -0.1542  0.8498 -0.3438 -0.2834
-0.5554  0.1684  1.5216  2.4527  0.0379
[torch.FloatTensor of size 3x5]


 0  0  0  0  2
 1  0  0  0  0
 0  0  1  2  0
[torch.IntTensor of size 3x5]

使用type_as(tesnor)将张量转换为给定类型的张量

import torch

tensor_1 = torch.FloatTensor(5)

tensor_2 = torch.IntTensor([10, 20])
tensor_1 = tensor_1.type_as(tensor_2)
assert isinstance(tensor_1, torch.IntTensor)

[1] pytorch张量torch.Tensor类型的构建与相互转换以及torch.type()和torch.type_as()的用法

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏企鹅号快讯

面向对象的初步理解连载 7

面向对象是一种主流的编程思维,其核心是把现实世界中的对象,对象之间的关系模拟到程序世界中,构造一个软件系统。 Java 是一种典型的面向对象编程语言。这篇文章主...

2059
来自专栏数据结构与算法

HDU3440 House Man

题意:有n栋房子,给出每栋房子的高度和开始时的相对位置,可以移动一些房子,但不能改变这些房子的相对位置,现在从最矮的房子开始,每次跳至比它高的第一栋房子, 而且...

2916
来自专栏专知

【Code】关关的刷题日记21——Leetcode 485. Max Consecutive Ones

关小刷刷题 21——Leetcode 485. Max Consecutive Ones 题目 Given a binary array, find the m...

29910
来自专栏开源优测

Python3插入排序

Python3插入排序 前言 为什么要开始写Python3算法系列呢? 一是很长很长时间没专门练习练习这种基本功 二是想把这个系列以基本代码的方式给写出来,提...

2686
来自专栏jessetalks

你必须知道的Javascript 系列

  JavaScript是见过最多人说它“有趣”,“好玩”的一门语言。不仅仅是因为它的灵活性,包括它本身很多的特性,比如说原型链,作用域链都是非常好玩的东西。现...

3928
来自专栏desperate633

[编程题] 调整队形代码

在幼儿园有n个小朋友排列为一个队伍,从左到右一个挨着一个编号为(0~n-1)。其中有一些是男生,有一些是女生,男生用'B'表示,女生用'G'表示。小朋友们都很顽...

862
来自专栏Aloys的开发之路

基于对象和面向对象的区别

基本上每个程序员都听过面向对象(Object-oriented)和基于对象(Object-based)这两个概念。其实这两个概念并没有很明显的界线,不过现在业界...

2009
来自专栏我是攻城师

偏执却管用的10条Java编程技巧

3497
来自专栏机器学习算法工程师

面试题——股票利益最大化

1. 题目 ...

3456
来自专栏移动开发面面观

排序备忘

排序是算法的一项基础能力,也是面试必考题。如何写一个恰当的排序,也是一个软件工程师的基本必备技能。

761

扫码关注云+社区

领取腾讯云代金券