如何修正求和中的数值误差

2024-04-19 11:49:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图返回一个向量(一维numpy数组),它的和为1。 关键是它必须等于1.0,因为它代表一个百分比。 然而,似乎有很多情况下,即使我将每个元素除以总数,总和也不等于1。 换句话说,“x”的和不等于1.0,即使x=x'/和(x')

发生这种情况的一个例子是下面的向量。你知道吗

x = np.array([0.090179377557090171, 7.4787182000074775e-05, 0.52465058646452456, 1.3594135000013591e-05, 0.38508165466138505])

这个向量x.sum()的和是1.0000000000000002,而被这个值除的向量的和是0.99999998。 从那一点开始,它就产生了回报。你知道吗

我所做的是将向量中的元素四舍五入到小数点后10位(np.round(x, decimals = 10)),然后除以和,得到的和正好是1.0。当我知道数值误差的大小时,这就起作用了。 不幸的是,在通常情况下情况并非如此。你知道吗

我想知道是否有一种方法可以只在向量已知的情况下修正的数值误差,使和等于1.0。你知道吗

编辑: Is floating point math broken? 这个问题没有回答我的问题,因为它只说明了差异发生的原因,而没有说明如何解决问题。你知道吗


Tags: numpy元素np情况代表数组array向量
1条回答
网友
1楼 · 发布于 2024-04-19 11:49:43

有点老套的解决方案:

x[-1] = 0
x[-1] = 1 - x.sum()

基本上把数值误差推到数组的最后一个元素。 (不需要事先进行四舍五入。)

:数学上更简单的解决方案:

x[-1] = 1.0 - x[:-1].sum()

不工作,因为numpy.sum在整个数组和片上的行为不同。你知道吗

相关问题 更多 >