规范化数组中的所有其他元素
Normalise all other elements in array
我有一个这样的数组(存储为 Python Fraction
s):
[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.
如何规范化数组的 rest,使数组总和仍然为 1,但第二个元素保持不变(0.25
在这种情况下) 其余元素按比例更改? Python 首选,但我真的只是在寻找一种方法。我已经 adding/multiplying 按系数尝试了其余元素,但它不起作用。
我觉得这个功能可以解决你的问题
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。
我有一个这样的数组(存储为 Python Fraction
s):
[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.
如何规范化数组的 rest,使数组总和仍然为 1,但第二个元素保持不变(0.25
在这种情况下) 其余元素按比例更改? Python 首选,但我真的只是在寻找一种方法。我已经 adding/multiplying 按系数尝试了其余元素,但它不起作用。
我觉得这个功能可以解决你的问题
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。