numpy数据类型dtype转换实现


Posted in Python onApril 24, 2021

这篇文章我们玩玩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,发现数组长度翻倍!

>>> 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,)

改变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()。

到此这篇关于numpy数据类型dtype转换实现的文章就介绍到这了,更多相关numpy dtype转换内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python排序方法实例分析
Apr 30 Python
Python入门之三角函数sin()函数实例详解
Nov 08 Python
numpy排序与集合运算用法示例
Dec 15 Python
符合语言习惯的 Python 优雅编程技巧【推荐】
Sep 25 Python
pyqt5实现按钮添加背景图片以及背景图片的切换方法
Jun 13 Python
多版本python的pip 升级后, pip2 pip3 与python版本失配解决方法
Sep 11 Python
Python生成验证码、计算具体日期是一年中的第几天实例代码详解
Oct 16 Python
Django中使用MySQL5.5的教程
Dec 18 Python
python为QT程序添加图标的方法详解
Mar 09 Python
jupyter notebook参数化运行python方式
Apr 10 Python
pycharm第三方库安装失败的问题及解决经验分享
May 09 Python
Django Form设置文本框为readonly操作
Jul 03 Python
解决python存数据库速度太慢的问题
Apr 23 #Python
python实战之90行代码写个猜数字游戏
Apr 22 #Python
python实战之一步一步教你绘制小猪佩奇
Apr 22 #Python
python 破解加密zip文件的密码
python入门之算法学习
Apr 22 #Python
python使用XPath解析数据爬取起点小说网数据
Apr 22 #Python
python 实现德洛内三角剖分的操作
You might like
综合图片计数器
2006/10/09 PHP
PHP IE中下载附件问题解决方法
2014/01/07 PHP
php实现分页工具类分享
2014/01/09 PHP
php递归删除目录下的文件但保留的实例分享
2014/05/10 PHP
PHP数组操作类实例
2015/07/11 PHP
PHP中如何防止外部恶意提交调用ajax接口
2016/04/11 PHP
PHP实现数据库的增删查改功能及完整代码
2018/04/18 PHP
兼容主流浏览器的iframe自适应高度js脚本
2014/01/10 Javascript
Javascript中this的用法详解
2014/09/22 Javascript
html的DOM中document对象forms集合用法实例
2015/01/21 Javascript
javascript 闭包详解
2015/02/15 Javascript
Javascript代码实现仿实例化类
2015/04/03 Javascript
jQuery简单实现遍历数组的方法
2015/04/14 Javascript
jQuery插件expander实现图片翻转特效
2015/05/21 Javascript
基于CSS3和jQuery实现跟随鼠标方位的Hover特效
2016/07/25 Javascript
express文件上传中间件Multer详解
2016/10/24 Javascript
JS实现iframe自适应高度的方法示例
2017/01/07 Javascript
vue中七牛插件使用的实例代码
2017/07/28 Javascript
jquery ajax异步提交表单数据的方法
2017/10/27 jQuery
微信小程序如何获取openid及用户信息
2018/01/26 Javascript
jQuery实现带右侧索引功能的通讯录示例【附源码下载】
2018/04/17 jQuery
微信小程序实现登录遮罩效果
2018/11/01 Javascript
微信小程序自定义可滑动日历界面
2018/12/28 Javascript
nodejs同步调用获取mysql数据时遇到的大坑
2019/03/02 NodeJs
Vue-cli3.x + axios 跨域方案踩坑指北
2019/07/04 Javascript
[00:21]DOTA2亚洲邀请赛 Logo演绎
2015/02/07 DOTA
解决python2.7用pip安装包时出现错误的问题
2017/01/23 Python
Python标准库之itertools库的使用方法
2017/09/07 Python
django模型层(model)进行建表、查询与删除的基础教程
2017/11/21 Python
python3+PyQt5实现柱状图
2018/04/24 Python
TensorFlow实现卷积神经网络
2018/05/24 Python
对python csv模块配置分隔符和引用符详解
2018/12/12 Python
py-charm延长试用期限实例
2019/12/22 Python
巴西婴儿用品商店:Bebe Store
2017/11/23 全球购物
计算s=f(f(-1.4))的值
2014/05/06 面试题
2014年幼儿园教学工作总结
2014/12/04 职场文书