python - 优化 Python 代码以量化浮点数序列
问题描述
我想模仿数字化模拟信号的过程,所以我正在编写代码来获取一个随机的浮点数组并将它们转换为具有一定位深度的整数数组。
我有完成工作的代码,但问题是它非常缓慢且成本高昂,我认为有更好的方法来做到这一点。我目前正在为某个位深度创建 bin,然后简单地浏览我的浮点列表,查看它们适合哪个 bin,然后创建一个字典,将浮点映射到整数值。这是我的代码:
import numpy as np
def quantize_float(list_of_floats, bit_depth):
MIN_VALUE = np.min(list_of_floats)
MAX_VALUE = np.max(list_of_floats)
NO_BINS = 2**(bit_depth) + 1
_, bin_val = np.histogram(list_of_floats, NO_BINS-1, range=(MIN_VALUE, MAX_VALUE))
bin_val = bin_val.tolist()
mapping = dict()
for i in list_of_floats:
mins = []
for j in bin_val:
mins.append(abs(j-i))
#bin_ = bin_val.index(min(bin_val, key = lambda x:abs(x-i)))
bin_ = mins.index(min(mins))
mapping[str(i)] = bin_
return mapping
位深度为 4 或 8 的情况似乎很好,但我必须在它以 24 或更大的位深度吃掉我的计算机内存之前停止执行。
解决方案
推荐阅读
- css - 无法更改 ng-multiselect 下拉菜单的样式
- c++ - 在没有太多条件的情况下如何避免除以零?
- c# - 如何告诉一个类它应该创建哪些对象?类型与对象混淆:(
- angular - 对 Firestore 的递归调用
- php - 使用 Group By 的 While 循环仅产生一行
- php - 将数字转换为星星
- python - subprocess.call() 中的 Pytest 模拟全局变量
- elasticsearch - Elasticsearch - 停止分析器不允许数字
- swift - 调试时未注册 URL 方案
- android-studio - Android Studio 格式化,同时保持手动对齐的项目