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



1.数据类型简介

Numpy

NumPy 支持比 Python 更多种类的数值类型。 下表显示了 NumPy 中定义的不同标量数据类型。

Pytorch

Torch定义了七种CPU张量类型和八种GPU张量类型,这里我们就只讲解一下CPU中的,其实GPU中只是中间加一个cuda即可,如torch.cuda.FloatTensor:

  • torch.FloatTensor(2,3) 构建一个2*3 Float类型的张量
  • torch.DoubleTensor(2,3) 构建一个2*3 Double类型的张量
  • torch.ByteTensor(2,3) 构建一个2*3 Byte类型的张量
  • torch.CharTensor(2,3) 构建一个2*3 Char类型的张量
  • torch.ShortTensor(2,3) 构建一个2*3 Short类型的张量
  • torch.IntTensor(2,3) 构建一个2*3 Int类型的张量
  • torch.LongTensor(2,3) 构建一个2*3 Long类型的张量

同样,直接使用类型名很可能会报错,正确的使用方式是torch.调用,eg,torch.FloatTensor()

2.Python的type()函数

type函数可以由变量调用,或者把变量作为参数传入。

返回的是该变量的类型,而非数据类型。

data = np.random.randint(0, 255, 300)
print(type(data))

# <class ‘numpy.ndarray‘>

3.Numpy/Pytorch的dtype属性

返回值为变量的数据类型

t_out = torch.Tensor(1,2,3)
print(t_out.dtype)
# torch.float32

t_out = torch.Tensor(1,2,3)
print(t_out.numpy().dtype)
# float32

4.Numpy中的类型转换

n_out = n_out.astype(np.uint8)
# 由变量调用,但是直接调用不会改变原变量的数据类型,是返回值是改变类型后的新变量,所以要赋值回去。
#初始化随机数种子
np.random.seed(0)

data = np.random.randint(0, 255, 300)
print(data.dtype)
n_out = data.reshape(10,10,3)

#强制类型转换
n_out = n_out.astype(np.uint8)
print(n_out.dtype)

img = transforms.ToPILImage()(n_out)
img.show()

Pytorch中的类型转换

pytorch中没有astype函数,正确的转换方法是

1.变量直接调用类型

tensor = torch.Tensor(3, 5)

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

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

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

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

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

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

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

# torch.short()将该tensor投射为short类型
newtensor = tensor.short()

# 同样,和numpy中的astype函数一样,是返回值才是改变类型后的结果,调用的变量类型不变

2.变量直接调用pytorch中的type函数

type(new_type=None, async=False)如果未提供new_type,则返回类型,否则将此对象转换为指定的类型。 如果已经是正确的类型,则不会执行且返回原对象。

用法如下:

t = torch.LongTensor(3, 5)
t = t.type(torch.FloatTensor)

3.变量调用pytorch中的type_as函数

如果张量已经是正确的类型,则不会执行操作。具体操作方法如下:

t = torch.Tensor(3,5)
tensor = torch.IntTensor(2, 3)
t = t.type_as(tensor)

——————————

版权声明:本文为CSDN博主「啧啧啧biubiu」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_37385726/article/details/81774150

原文地址:https://www.cnblogs.com/ziwh666/p/12399075.html

时间: 2024-08-24 15:54:59

Numpy/Pytorch之数据类型与强制转换的相关文章

输入与输出,数据类型,强制转换,运算符

输入与输出 输出console.write();不换行 输出console.writeline();打印之后换行 输入console.read();不换行 输入console.readline();换行 字符串之间运用加号进行拼接,数字之间加号表示运算. 数据类型: int(整型)   long  double(双精度浮点数)  string(字符串型)  bool 强制转换: int a=covert.toint32(console.readline()); int a=int.parse(c

java基础数据类型加强制转换

1.大致分为基本数据类型和引用数据类型 (1)一个小数默认是double类型,如果需要使用float类型,需要在小数的后面添加F或者f (2) boolean.只有两个值,true与false 2.强制转换 (1)格式: 小数据类型  变量名  = (小数据类型)大数据类型的数据 (2) 强制类型转换可能会丢失精度 原文地址:https://www.cnblogs.com/suitang/p/11517309.html

数据类型的强制转换

public class Test { public static void main(String[]args) { int a=4; double b=3.6; //int c=a+b; int c=a+(int)b; System.out.println(c); } } 输出的结果是7 注释那行就会出错,原因:a是int类型,b是double类型    c就是double类型的 如果要想c是int类型的,就必须进行强制类型转换 强制转换,必须是富人(double)转换为穷人(int)因为他

JAVA数据类型及其强制转换

byte b1=3,b2=4,b; b=(byte)(b1+b2); //b=b1+b2是错误的,可能损失精度.b是byte型,b1+b2是int型. b=3+4; System.out.println(b); byte by = (byte)130; //by=130是会出现错误的,可能损失精度.130是int型,而by是byte型. //解决方法 强制转换 System.out.println(by); //结果为-126 short s = 1; s += 1; int x = 4; in

《C#高级编程》【第7章】运算符与类型强制转换 -- 学习笔记

       运算符编程语言的基本元素,它使得我们的代码更加的简洁明了.然而我们为了解决操作数类型不同的问题,我们又有引入了强制转换的概念.我们先看看本章的内容构成吧. 1.运算符 我们来看看一些常见的运算符: <1>条件运算符 其语法如下: Condition ? true_Expression : false_Expression 当条件Condition为真时,其将执行true_Expression,否则执行false_Expression. <2> checked 和

c# 强制转换, 隐式转换, 显式转换

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks; namespace 第二节课{    class Program    {        static void Main(string[] args)        {            decimal i = 4;            int a = 5;     

JAVA数据类型自动转换,与强制转换

一.数据类型自动转换 public class Test{ public static void main(String[] args){ int a = 1; double b = 1.5; double a_b_count = a+b; //整型与双精度型相加时,结果会自动转换为双精度型 String c = "凌"; char d = '晨'; char e = '好'; String c_d_e_content = c+d+e; //字符型与字符串型相加时,结果会自动转换为字符

第二十一篇 Java 数据类型的定义 ,以及基础类型的自动转换和强制转换

大家好,今天呢我吧我所学到的一些知识点共享给大家,希望大家看完之后,要是有什么不懂的,请随时联系我,要是觉得我写的不是很好的 ,还希望你们能够谅解一下,因为小弟我刚学会写博客也没多久,很多格式和方法都不是很完善,希望大家多多包涵,好了 废话就不多说了,来谈一下今天我所学到的一些知识点吧: 今天我主要是学到了一些Java中的数据类型,其中,Java中的数据类型分为俩类------基础数据类和逻辑数据类,下面我所介绍的都是基本数据类的一些分类,至于逻辑类,由于使用次数过少,所以今天就不再这里多做介绍

java--基本数据类型的转换(强制转换)

强制类型的转换 规则: 1.执行算术运算时,低类型(短字节)可以转换为高类型(长字节):例如: int型转换成double型,char型转换成int型等等. 就是用强制类型来实现. 3.强制类型转换语法 :当大容量的变量向小的变量的类型去转换时需要强制转换 .    (目标类型) 值: 1 package pkg1; 2 3 public class Test1{ 4 public static void main(String args[]){ 5 6 int i = 10; 7 8 byte