【发布时间】:2011-10-25 10:51:08
【问题描述】:
我正在尝试将用另一种语言编写的代码的一部分移植到 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?这与byteswap 或newbyteorder 或其他有什么关系?
【问题讨论】:
标签: python integer floating-point