归一化向量,使总和等于 1,同时满足下限
Normalize vector such that sum equals 1, while satisfying a lower bound
给定下限 0.025,我想要一个包含权重总和为 1 并满足此下限的向量。从具有任意长度且值范围为 0.025(下限)到 1 的向量开始。
例如,
[0.025, 0.8, 0.7]
然后除以数字总和的归一化大致得到以下结果:
[0.016, 0.524, 0.459]
现在这不满足下限,关于如何让它工作有什么想法吗?
将下限添加到被除数和除数:
为了便于阅读,我使用了 numpy
:
import numpy as np
v = np.array([0.025, 0.8, 0.7])
v2 = (v + min(v)) / sum(v + min(v))
输出:
>>> v2
array([0.03125 , 0.515625, 0.453125])
>>> sum(v2)
1.0
如果您希望权重(数组中的值)总和为 1,您可以将每个值除以所有值的总和(即按总和归一化)。此过程保留每对值的相对大小我的意思是:在这一步之前和之后,第二项将是第四项的 5 倍。
另一方面,您希望所有值都大于 0.025。想象一下,如果一个项目在归一化之前是另一个项目的 50 倍,并且最小值必须是 0.025,那么另一个项目需要是 1.25,这已经大于总和了。
你可以发现你不能(给定任何数组)只是平等地缩放所有值,以便它们总和为 1AND 最小值为0.025.
那么问题是你想在过程中保留值之间的什么关系?
反之,你不能有超过40个项目,所有项目都大于0.025,总和为1。所以“任意长度”也是行不通的。
给定下限 0.025,我想要一个包含权重总和为 1 并满足此下限的向量。从具有任意长度且值范围为 0.025(下限)到 1 的向量开始。
例如,
[0.025, 0.8, 0.7]
然后除以数字总和的归一化大致得到以下结果:
[0.016, 0.524, 0.459]
现在这不满足下限,关于如何让它工作有什么想法吗?
将下限添加到被除数和除数:
为了便于阅读,我使用了 numpy
:
import numpy as np
v = np.array([0.025, 0.8, 0.7])
v2 = (v + min(v)) / sum(v + min(v))
输出:
>>> v2
array([0.03125 , 0.515625, 0.453125])
>>> sum(v2)
1.0
如果您希望权重(数组中的值)总和为 1,您可以将每个值除以所有值的总和(即按总和归一化)。此过程保留每对值的相对大小我的意思是:在这一步之前和之后,第二项将是第四项的 5 倍。
另一方面,您希望所有值都大于 0.025。想象一下,如果一个项目在归一化之前是另一个项目的 50 倍,并且最小值必须是 0.025,那么另一个项目需要是 1.25,这已经大于总和了。
你可以发现你不能(给定任何数组)只是平等地缩放所有值,以便它们总和为 1AND 最小值为0.025.
那么问题是你想在过程中保留值之间的什么关系?
反之,你不能有超过40个项目,所有项目都大于0.025,总和为1。所以“任意长度”也是行不通的。