numpy数据类型dtype转换

numpy数据类型dtype转换这篇文章我们玩玩numpy的数值数据类型转换 导入numpy>>>importnumpyasnp 一、随便玩玩生成一个浮点数组>>>a=np.random.random(4)看看信息>>>aarray([0.0945377,0.52199916,0.62490646,…

大家好,又见面了,我是你们的朋友全栈君。

这篇文章我们玩玩numpy的数值数据类型转换

 

导入numpy

>>> import numpy as np

 

一、随便玩玩

生成一个浮点数组

>>> a = np.random.random(4)

看看信息

>>> a
array([ 0.0945377 ,  0.52199916,  0.62490646,  0.21260126])
>>> a.dtype
dtype('float64')
>>> a.shape
(4,)

 

改变dtype,发现数组长度翻倍!

按 Ctrl+C 复制代码

>>> a.dtype = ‘float32’ >>> a array([ 3.65532693e+20, 1.43907535e+00, -3.31994873e-25, 1.75549972e+00, -2.75686653e+14, 1.78122652e+00, -1.03207532e-19, 1.58760118e+00], dtype=float32) >>> a.shape (8,)

按 Ctrl+C 复制代码

改变dtype,数组长度再次翻倍!

 

>>> a.dtype = 'float16'
>>> a
array([ -9.58442688e-05,   7.19000000e+02,   2.38159180e-01,
         1.92968750e+00,              nan,  -1.66034698e-03,
        -2.63427734e-01,   1.96875000e+00,  -1.07519531e+00,
        -1.19625000e+02,              nan,   1.97167969e+00,
        -1.60156250e-01,  -7.76290894e-03,   4.07226562e-01,
         1.94824219e+00], dtype=float16)
>>> a.shape
(16,)

 

改变dtype=’float’,发现默认就是float64,长度也变回最初的4

 

>>> a.dtype = 'float'
>>> a
array([ 0.0945377 ,  0.52199916,  0.62490646,  0.21260126])
>>> a.shape
(4,)
>>> a.dtype
dtype('float64')

 

把a变为整数,观察其信息

>>> a.dtype = 'int64'
>>> a
array([4591476579734816328, 4602876970018897584, 4603803876586077261,
       4596827787908854048], dtype=int64)
>>> a.shape
(4,)

改变dtype,发现数组长度翻倍!

>>> a.dtype = 'int32'
>>> a
array([ 1637779016,  1069036447, -1764917584,  1071690807,  -679822259,
        1071906619, -1611419360,  1070282372])
>>> a.shape
(8,)

改变dtype,发现数组长度再次翻倍!

>>> a.dtype = 'int16'
>>> a
array([-31160,  24990,  13215,  16312,  32432, -26931, -19401,  16352,
       -17331, -10374,   -197,  16355, -20192, -24589,  13956,  16331], dtype=int16)
>>> a.shape
(16,)

改变dtype,发现数组长度再次翻倍!

 

>>> a.dtype = 'int8'
>>> a
array([  72, -122,  -98,   97,  -97,   51,  -72,   63,  -80,  126,  -51,
       -106,   55,  -76,  -32,   63,   77,  -68,  122,  -41,   59,   -1,
        -29,   63,   32,  -79,  -13,  -97, -124,   54,  -53,   63], dtype=int8)
>>> a.shape
(32,)

 

改变dtype,发现整数默认int32!

 

>>> a.dtype = 'int'
>>> a.dtype
dtype('int32')
>>> a
array([ 1637779016,  1069036447, -1764917584,  1071690807,  -679822259,
        1071906619, -1611419360,  1070282372])
>>> a.shape
(8,)

 

 

二、换一种玩法

很多时候我们用numpy从文本文件读取数据作为numpy的数组,默认的dtype是float64。
但是有些场合我们希望有些数据列作为整数。如果直接改dtype=’int’的话,就会出错!原因如上,数组长度翻倍了!!!

下面的场景假设我们得到了导入的数据。我们的本意是希望它们是整数,但实际上是却是浮点数(float64)

>>> b = np.array([1., 2., 3., 4.])
>>> b.dtype
dtype('float64')

 

用 astype(int) 得到整数,并且不改变数组长度

 

>>> c = b.astype(int)
>>> c
array([1, 2, 3, 4])
>>> c.shape
(8,)
>>> c.dtype
dtype('int32')

 

 

如果直接改变b的dtype的话,b的长度翻倍了,这不是我们想要的(当然如果你想的话)

 

>>> b
array([ 1.,  2.,  3.,  4.])

>>> b.dtype = 'int'
>>> b.dtype
dtype('int32')
>>> b
array([         0, 1072693248,          0, 1073741824,          0,
       1074266112,          0, 1074790400])
>>> b.shape
(8,)

 

三、结论

numpy中的数据类型转换,不能直接改原数据的dtype!  只能用函数astype()。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/136400.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 网络爬虫必备知识之concurrent.futures库

    1.concurrent.futures库简介python标准库为我们提供了threading和mutiprocessing模块实现异步多线程/多进程功能。从python3.2版本开始,标准库又为

    2021年12月29日
    47
  • 卡盟网站程序源码,支持无限分站,货源共享「建议收藏」

    卡盟网站程序源码,支持无限分站,货源共享「建议收藏」服务器系统:cenos7.x64位(购买vps都知道ba?安装7.x以上系统)宝塔安装命令:bt.cn(自行获取)(baota我已经安装好了,接下来给大家演示如何操作搭建卡信乐)ssh输入宝塔命令会自动安装好自己查看一下登陆地址和账号密码就可以登陆面板后安装apache2.4+mysql5.5+php5.6phpadmin4.7(应该都会安装把!)登陆宝塔,打开网站的根目录的home文件夹,上传源码然后解压上传好后解压文件修改vhost文件里的域名创建一个数据库yunos数据库

    2022年8月13日
    3
  • Java中的join方法原理详解「建议收藏」

    Java中的join方法原理详解「建议收藏」1.synchronized中的对象锁是线程的实例我们可以使用同步语句块的方式对需要同步的代码进行包裹。Objectobj=newObject();synchronized(obj){   obj.wait();    //线程在这里等待}此时线程会在obj.wait()处等待,如果想继续执行,此时需要别的线程通过notify、notifyAll唤醒或者中断。但是如果o…

    2022年5月1日
    53
  • CAS单点登录(三)–服务端改造(登录页及登录方式的自定义)

    CAS单点登录(三)–服务端改造(登录页及登录方式的自定义)上一篇文章(http://blog.csdn.net/u012116457/article/details/52161201)提到,为了更好的满足我们的要求,还需要对服务端进行改造。最近发现了一个巨牛的人工智能教程,不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!所以分享给大家,感兴趣的童鞋可以看看。点这里可以跳转到教程。1.新建cas_server为了方便,首先我们现在…

    2022年6月5日
    95
  • Java中的关键字有哪些?「Java中53个关键字的意义及使用方法」

    Java中的关键字有哪些?「Java中53个关键字的意义及使用方法」Java中的关键字有哪些?Java的关键字(keyword)有多少个?Java的保留字(reserveword)有多少个?分别是什么?Java的关键字分别是什么,作用是什么?

    2022年7月7日
    25
  • leetcode-152. 乘积最大子数组(动态规划+滚动数组)「建议收藏」

    leetcode-152. 乘积最大子数组(动态规划+滚动数组)「建议收藏」给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。示例 1:输入: [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6。示例 2:输入: [-2,0,-1]输出: 0解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。typedef long long ll;const int N = 1e5 + 10;const int INF = 0x3f3f3f3f;int f[2][

    2022年8月9日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号