将随机浮点数列表转换为最接近的定义整数集
Converting list of random floats to nearest defined set of integers
将伪随机浮点数转换为有限整数值集中最接近的值的simplest/Pythonic方法是什么?
例如,给定值 [0.123, 2.234, 8.222]
和 finite set {1, 2, 3}
我想要 [1, 2, 3]
的输出列表
如果您不介意使用 numpy 模块,
import numpy as np
vals = [0.123, 2.234, 8.222]
ints = [1, 2, 3]
output = [ints[np.argmin([abs(x - y) for x in ints])] for y in vals]
可以完成这项工作。如果您按降序 (ints = [3, 2, 1]
) 对 ints
进行排序,则 1.5 将映射到 2.
这比评论中介绍的二分算法效率低(而且也不漂亮!),但无论如何我想这个算法很容易实现和理解。
将伪随机浮点数转换为有限整数值集中最接近的值的simplest/Pythonic方法是什么?
例如,给定值 [0.123, 2.234, 8.222]
和 finite set {1, 2, 3}
我想要 [1, 2, 3]
如果您不介意使用 numpy 模块,
import numpy as np
vals = [0.123, 2.234, 8.222]
ints = [1, 2, 3]
output = [ints[np.argmin([abs(x - y) for x in ints])] for y in vals]
可以完成这项工作。如果您按降序 (ints = [3, 2, 1]
) 对 ints
进行排序,则 1.5 将映射到 2.
这比评论中介绍的二分算法效率低(而且也不漂亮!),但无论如何我想这个算法很容易实现和理解。