gpt4 book ai didi

python - numpy sum 没有给出 float32 类型的正确答案

转载 作者:行者123 更新时间:2023-11-28 20:45:52 24 4
gpt4 key购买 nike

我正在使用 numpy 对数组求和,它不适用于 float32 类型。我究竟做错了什么?一旦我直接求和,然后我使用 numpy.sum。看下面的代码

import struct
import numpy as np
import matplotlib.pyplot as plt
import math
from pylab import *
xpt=128
ypt=128
zpt=256
bx1=np.zeros((xpt,ypt,zpt),dtype=float32)
bx2=np.zeros((xpt,ypt,zpt),dtype=float32)
bx3=np.zeros((xpt,ypt,zpt),dtype=float32)

bx1=bx1+1.0
bx2=bx2+1.5
bx3=bx3+2.0

dummy=0.0
for kxi in range (0,xpt) :
for kyi in range (0,ypt) :
for kzi in range (0,zpt) :
dummy=dummy+(bx1[kxi,kyi,kzi]*bx1[kxi,kyi,kzi]+bx2[kxi,kyi,kzi]*bx2[kxi,kyi,kzi]+bx3[kxi,kyi,kzi]*bx3[kxi,kyi,kzi])
print(dummy)

print(np.sum(bx1**2+bx2**2+bx3**2))

两个输出应该匹配。这给出了输出:
30408704.0
3.1323e+07

直和给出了正确的结果,而 np.sum 给出了错误的结果。但是,如果我使用 float64,则 np.sum 会给出正确的结果。这背后的原因是什么?

谢谢。

最佳答案

那么大的数字,float32 精度有问题。我还没有了解如何存储 2.25,但是最小的例子

x = 2.25 * np.ones((128, 128, 256), dtype = float32)
y = 2.25 * np.ones((128, 128, 256), dtype = float64)
x.sum() # 8854642.0
y.sum() # 9437184.0
2.25 * 128 * 128 * 256 # 9437184.0

表明您失去了准确性,但通过 float64(python 的 standard float)恢复了准确性。

关于python - numpy sum 没有给出 float32 类型的正确答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22107928/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com