将Float32格式的数据提取为int32

2 投票
1 回答
2154 浏览
提问于 2025-04-17 22:47

如何将格式为 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]

撰写回答