(代码示例是python)
让我们假设我们有一个加起来为100的百分比列表:
mylist = [2.0, 7.0, 12.0, 35.0, 21.0, 23.0]
Run Code Online (Sandbox Code Playgroud)
某些mylist值可能会更改,其他值必须保持固定.
让我们假设前3(2.0,7.0,12.0)必须保持固定,最后3(35.0,21.0,23.0)可能会改变.
fix = mylist[:3]
vari = mylist[3:]
Run Code Online (Sandbox Code Playgroud)
目标是将新项添加到mylist,而sum(mylist)保持100.0并且vari
项保持它们之间的关系.为此,我们需要
从每个变量项中减去一个PERCENTAGE.示例:假设我们要将4.0添加到mylist.
使用丑陋的aproximation循环我发现我需要减去ca.
每个变量项目的5.0634%(CERTAIN PERCENTAGE = 5.0634):
adjusted =[]
for number in vari:
adjusted.append(number-(number*(5.0634/100.0)))
adjusted.extend(fix)
adjusted.append(4.0)
Run Code Online (Sandbox Code Playgroud)
现在调整包含我想要的结果.
这个怎么样?
def adjustAppend( v, n ):
weight= -n/sum(v)
return [ i+i*weight for i in v ] + [n]
Run Code Online (Sandbox Code Playgroud)
给定一个数字列表v,附加一个新数字,n.对现有数字进行加权以保持总和相同.
sum(v) == sum( v + [n] )
Run Code Online (Sandbox Code Playgroud)
v,i的每个元素必须通过i,r(i)的某种函数来减少
sum(r(i)) == -n
Run Code Online (Sandbox Code Playgroud)
要么
sum( map( r, v ) ) == -n
Run Code Online (Sandbox Code Playgroud)
因此,加权函数是 -(n*i)/sum(v)