将Float32格式的数据提取为int32
如何将格式为 float32
的数据(范围在 [-1, +1]
之间)提取到 int32
格式的数据中,这个范围是 [-2^31, 2^31-1]
?
我想做的事情是这样的(但希望能更高效,也就是说如果可以的话,不想用乘法或转换):
f = struct.unpack('f', data) # data is in IEEE float32 format
f *= 2**31
out = int(myfloat)
举个例子:
这是浮点数 0.000000000 : 00 00 00 00
这是浮点数 1.000000000 : 00 00 80 3F
这是浮点数 -0.000000000 : 00 00 00 80
这是浮点数 -1.000000000 : 00 00 80 BF
为什么编码 1.000000 会得到这些数字呢?
注意:这对音频应用很有用,因为 .wav 格式的 32 位 IEEE 浮点数需要和常规的 32 位整数 .wav 文件一起使用。
附注:我最近在这里问了一个关于浮点 numpy 数组转为整数 numpy 数组的问题: 从 IEEE32 浮点数到 32 位整数 numpy 数组(示例:音频 .wav 文件),但现在我意识到这个问题并不是特定于 numpy 的,所以我在这里提出了一个更一般的问题。
1 个回答
1
你可以把你的浮点数列表放进一个数组里,然后定义数据类型,这里用的是'int32'。另外要注意,在Numpy中,浮点数的数据类型是'float64'。
from numpy import *
float_data_list = [1.2, 3.5, 5.1]
matrice = array(float_data_list, dtype ='int32' ) # define dtype
print matrice
output: [1 3 5]