31 lines
1.0 KiB
Python
31 lines
1.0 KiB
Python
import numpy as np
|
|
|
|
|
|
def float_to_int16(float_values, _num_ints):
|
|
"""
|
|
将指定数量的浮点数转换为指定数量的 16 位整数。
|
|
|
|
:param float_values: 输入的浮点数列表或数组。
|
|
:param _num_ints: 要输出的 int16 数量。
|
|
:return: 转换后的 int16 数组。
|
|
"""
|
|
# 缩放浮点数到 int16 范围
|
|
scale_factor = 32767 / max(abs(np.min(float_values)), np.max(float_values), 1)
|
|
scaled_floats = np.array(float_values) * scale_factor
|
|
|
|
# 转换为 int16 并调整数量
|
|
int16_values = scaled_floats.astype(np.int16)
|
|
if len(int16_values) > _num_ints:
|
|
return int16_values[:_num_ints] # 截取
|
|
elif len(int16_values) < _num_ints:
|
|
padding = np.zeros(_num_ints - len(int16_values), dtype=np.int16)
|
|
return np.concatenate([int16_values, padding]) # 补零
|
|
else:
|
|
return int16_values
|
|
|
|
|
|
# 示例用法
|
|
floats = [0.1, 0.5, -0.3, 0.9, -1.0] # 输入浮点数
|
|
num_ints = 10 # 指定需要的 int16 数量
|
|
result = float_to_int16(floats, num_ints)
|
|
print(result) |