提问人:Umberto Fontanazza 提问时间:11/12/2023 更新时间:11/15/2023 访问量:100
将浮点数列表归一化为概率
Normalize list of floats to probabilities
问:
我有一个概率权重列表,我想对其进行归一化,以便.weights = [3, 7, 4, 2]
sum(weights) == 1
这在以后可以用于类似“random.choice 的加权版本”和 numpy.random.choice
目前我正在做这样的事情:
norm_one = sum(weights)
probabilities = [x / norm_one for x in weights]
我想知道我正在做的事情是否有任何问题,因为浮点数是用有限位数表示的,并且列表的总和可能不等于 1,并且是否有内置函数来规范化我应该使用的列表或 numpy.array(或任何更好的方法)
答:
1赞
Viktor Veselý
11/15/2023
#1
从技术上讲,你是对的,可能会发生总和相等的情况,但像 Numpy 和 Pandas 这样的包并不关心这一点,它会正常工作(python 的魔力)。1 +- very_small_number
正如其他人在评论中指出的那样,使用 numpy 进行规范化
- 在处理大型数组时,它会快得多
- 它会不那么冗长
法典:
import numpy as np
weights = np.array([5, 18, 7])
probabilities = weights / weights.sum()
评论
axis
sklearn.preprocessing.normalize(a, norm='l1'),
但它完全是 2D