提问人:Dara Java 提问时间:12/4/2020 最后编辑:Dara Java 更新时间:12/4/2020 访问量:45
规范化数组中的所有其他元素
Normalise all other elements in array
问:
我有一个这样的数组(存储为 Python s):Fraction
[3/10, 1/2, 1/5] == 1
我将一些元素(在本例中为第二个元素)乘以一些已知因素(这里):1/2
[3/10, 1/4, 1/5] != 1
所以答案是:
[????, 1/4, ???] == 1, where arr[0] and arr[2] are proportionate to their original values.
如何对数组的其余部分进行归一化,使数组的总和仍然为 1,但第二个元素保持不变(在本例中),其余元素按比例更改?首选 Python,但我真的只是在寻找一种方法。我试过将其余元素添加/乘以因子,但它不起作用。0.25
答:
1赞
Wassim Joane
12/4/2020
#1
我认为这个功能可以解决你的问题
from fractions import Fraction as frac
old_list = [frac(3, 10), frac(1, 2), frac(1, 5)]
def multiply_frac_item(frac_list, item_index, frac_multiplier):
old_item = frac_list[item_index]
new_item = old_item * frac_multiplier
for i in range(len(frac_list)):
if (i == item_index):
frac_list[i] = new_item
else:
frac_list[i] = frac_list[i] * (1 - new_item) / (1 - old_item)
return frac_list
new_list = multiply_frac_item(old_list, 1, frac(1, 2))
print(new_list)
assert sum(new_list) == 1
>>> [Fraction(9, 20), Fraction(1, 4), Fraction(3, 10)]
基本上,您将列表中的其余项目乘以相同的系数 ((1 - new_item) / (1 - old_item)),其中旧项目和新项目表示要相乘的列表元素。这将保持相同的比例(因为所有项目都将乘以相同的因子)并使列表的总和等于 1。
上一个:使用贝塞尔曲线闭合形状
下一个:轴旋转
评论
[1/2, 1/2]
1/2
[1/4, 1/2]
[1/4, 3/4]
0.25