为何x=x+y与x=+y执行结果不同?CDF函数异常排查
问题解析:
x = x + y vs x = +y 的本质区别 你遇到的这个问题核心是混淆了二元加法赋值和一元正号运算符的作用,这两个表达式完全不是一回事:
1. 两种表达式的实际含义
cummdens = cummdens + pdf[n]/total:这是标准的累加操作,把当前项的归一化密度值,加到之前已经累积的cummdens变量上,每一次循环都会保留之前的累积结果,这正是计算CDF(累积分布函数)所需要的逻辑。cummdens = +pdf[n]/total:这里的+是一元正号运算符,它的作用只是返回操作数的正值(对于正数来说,就是直接返回原数)。所以这个表达式等价于cummdens = pdf[n]/total——每次循环都会把cummdens重置为当前项的密度值,完全没有累积的效果。
2. 结合你的代码实例分析
你的原始概率字典orgs_pdf={"Sales":0.2, "Marketing":0.2, "IT":0.3, "Manufacturing":0.25, "Finances":0.05},因为所有值的和已经是1,所以pdf[n]/total其实等于pdf[n]本身:
- 变体1中,第一次循环
cummdens变成0+0.2=0.2,第二次变成0.2+0.2=0.4,以此类推,最终得到符合预期的累积结果。 - 变体2中,第一次循环
cummdens被赋值为0.2,第二次被覆盖为0.2,第三次覆盖为0.3……每一次都丢失了之前的累积值,所以最终结果和原PDF完全一致。
补充:一元正号的常见用途
一元正号通常用来将非数值类型转换为数值(比如+"123"会得到整数123),或者确保数值保持其原有符号(比如+(-5)还是-5,它不会改变正数的符号,也不会把负数转成正数)。但无论如何,它和累加操作没有任何关系。
内容的提问来源于stack exchange,提问作者Mzungu Msafiri
相关产品推荐
相关产品推荐

