程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

将16位整数转换为32位浮点

发布于2019-11-19 21:46     阅读(4064)     评论(0)     点赞(7)     收藏(1)


我正在尝试将用另一种语言编写的代码的一部分(对于您听说过的人来说,由Wavemetrics称为Igor Pro的一种晦涩的代码)移植到Python。

在此代码中,数据类型从16位整数(从16位大端字节二进制文件中读取)转换为单精度(32位)浮点。在此程序中,转换如下:

有符号的16位整数:

print tmp
tmp[0]={-24160,18597,-24160,18597,-24160}

转换为32位浮点数:

Redimension/S/E=1 tmp
print tmp
tmp[0]={339213,339213,5.79801e-41,0,0}

/S标志/选项表示的数据类型tmp应该是FLOAT32代替INT16的。但是,我相信重要的标志/选项是/E=1,它被称为“在不转换或移动数据的情况下强制重塑”。

在Python中,转换如下:

>>> tmp[:5]
array([-24160,  18597, -24160,  18597, -24160], dtype=int16)

>>> tmp.astype('float32')
array([-24160.,  18597., -24160., ...,  18597., -24160.,  18597.], dtype=float32)

这是我所期望的,但是我需要找到一个函数/操作来模拟/E=1上面原始代码中选项。是否有一种明显的方式将-24160和18597都转换为339213?这与byteswapnewbyteorder其他有关吗?


解决方案


import numpy
tmp=numpy.array([-24160,18597,-24160,18597,-24160, 0], numpy.int16)
tmp.dtype = numpy.float32
print tmp

结果:

[  3.39213000e+05   3.39213000e+05   5.79801253e-41]

我必须在值列表中添加零,因为值的数量为奇数。由于存在5个16位值,因此无法将其解释为32位浮点数。



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:https://www.pythonheidong.com/blog/article/161801/87ea26d7bff290f03879/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

7 0
收藏该文
已收藏

评论内容:(最多支持255个字符)