我有一个包含这些规范化值的列表
list_a = [0.25, 0.25, 0.25, 0.25]
现在我想把一个条目的值更改为另一个数字,比如说0.75
。这个数字是固定的,不应该再改变了。
list_a_changed = [0.25, 0.25, 0.75, 0.25]
要确保列表中所有值的和加起来等于1
,其余值需要为0.0833
。所以我的清单必须是:
list_a_normalized = [0.083, 0.083, 0.75, 0.083]
如果所有值在初始列表中共享相同的百分比,这是很容易确定的。我可以只做1-0.75=0.25
,并将0.25
除以其余数字,因为它们在总数中所占百分比相同。
value_change = 0.75
remaining_value = 1 - value_change
divided_remaining_value = remaining_value / (len(list_a_changed) - 1)
list_a_normalized = [divided_remaining_value, divided_remaining_value, value_change, divided_remaining_value ]
但是如果原始列表是这样的,你会怎么做:
list_b = [0.25, 0.45, 0.20, 0.10]
我将一个值更改为0.05
list_b_changed = [0.25, 0.45, 0.05, 0.10]
您将如何计算其他数字的值,以便它们每个都包含剩余0.95
的适当部分?
使用touch_normalized
item并保持列表的规范化:re_normalized
通过与正确的因子相乘来保持列表的规范化(该因子是1与不带触摸项的和之间的比率):
def touch_normalized(lst, index, value):
def touch(lst, index, value):
lst[index] = value
def re_normalize(lst, index, value):
multiply_factor = (1 - value) / (sum(lst) - value)
for j in range(len(lst)):
if i == j:
continue
lst[j] *= multiply_factor
touch(lst, i, value)
re_normalize(lst, i, value)
i = 2
value = 0.05
list_b = [0.25, 0.45, 0.20, 0.10]
# Change item at index to value and keep list normalized
touch_normalized(list_b, i, value)
# 1.0
print(sum(list_b))
你可以
剩余
def normalize(values, index_not_change):
remaining = 1 - values[index_not_change]
total_except_remaining = sum(values) - values[index_not_change]
return [(value * remaining / total_except_remaining if idx != index_not_change else value)
for idx, value in enumerate(values)]
print(normalize([0.25, 0.25, 0.75, 0.25], 2)) # [0.0833333333, 0.0833333333, 0.75, 0.0833333333]
print(normalize([0.25, 0.45, 0.05, 0.10], 2)) # [0.296875, 0.534375, 0.05, 0.11875000000000001]
要理解total_except_retains
的用途,如果没有它的话,应该是
normalize([0.25, 0.25, 0.75, 0.25], 2) -> [0.0625, 0.0625, 0.75, 0.0625]
因为您需要计算剩余值的四分之一(0.25
),但加上相对和是0.75
而不是1,您将更新到它们的实际比例
您也可以使用相同的方法进行修改
def normalize(values, position, new_value):
values[position] = new_value
remaining = 1 - new_value
total_except_remaining = sum(values) - new_value
print(total_except_remaining)
return [(value * remaining / total_except_remaining if idx != position else value)
for idx, value in enumerate(values)]
print(normalize([0.25, 0.25, 0.25, 0.25], 2, 0.75))
小数转 2 进制 方法:乘2取整 对十进制小数乘2得到的整数部分和小数部分,整数部分既是相应的二进制数码,再用2乘小数部分(之前乘后得到新的小数部分),又得到整数和小数部分。如此不断重复,直到小数部分为0或达到精度要求为止。第一次所得到为最高位,最后一次得到为最低位。 如0.25的二进制: 0.25*2 = 0.5 取整是0, 0.5*2 =1.0 取整是1, 即0.25的二进制为 0.01(第一
小数转 2 进制 方法:乘2取整 对十进制小数乘2得到的整数部分和小数部分,整数部分既是相应的二进制数码,再用2乘小数部分(之前乘后得到新的小数部分),又得到整数和小数部分。如此不断重复,直到小数部分为0或达到精度要求为止。第一次所得到为最高位,最后一次得到为最低位。 如0.25的二进制: 0.25*2 = 0.5 取整是0, 0.5*2 =1.0 取整是1, 即0.25的二进制为 0.01(第一
在浮动范围组件上使用ngModel时出现运行时错误。:未指定名称属性的窗体控件没有值访问器 有什么解决方案可以在这两个组件之间绑定ngModel数据吗?
我一直在想,找到了很多方法,当格式化成字符串时,可以从doubles中删除.0,但从来没有找到过如何为价格保留东西。 但我需要的是这样的女人 这不是一个重复的,因为它会在我不想要的任何价格上加上00...我只是想去掉浮点,如果它后面有零,但如果有一个数字,就保留任何零。 例如。
问题内容: Python是否提供了获取浮点值的功能,该函数是通过将现有浮点值的最低有效位递增而得到的? 我正在寻找类似于C ++ 11中添加的功能的东西。 问题答案: 这里有五个(实际上是四个半)解决方案。 解决方案1:使用Python 3.9或更高版本 2020年10月发布的Python 3.9包括一个新的标准库函数,该函数直接提供此功能:用于将下一个浮点数向正无穷大。例如: 如果查看方法提供的
对于精度很重要的用例,推荐使用Python的本机浮点实现还是十进制实现? 我认为这个问题很容易回答:如果累积误差具有重要意义,例如可能在计算轨道轨迹等方面,那么一个精确的表示可能更有意义。 null
假设我有以下内容: 将被提升为并且将比较两个数字,但是可以表示所有值吗?为什么不将和提升为?
我只需要在Python中舍入浮点数的最后2个正数 EX: 0.000000302329303- 这是否可能以类似圆形的简单方式实现?