我知道基本数据类型,浮点类型(float,double)不能准确地保存一些数字。
然而,在将一些代码从 Matlab 移植到 Python (Numpy) 时,我发现计算上有一些显着差异,我认为它会回到精确度。
使用以下代码,对 500 维向量进行 z 归一化,其中只有前两个元素具有非零值。
MATLAB:
Z = repmat(0,500,1); Z(1)=3;Z(2)=1;
Za = (Z-repmat(mean(Z),500,1)) ./ repmat(std(Z),500,1);
Za(1)
>>> 21.1694
Python:
from numpy import zeros,mean,std
Z = zeros((500,))
Z[0] = 3
Z[1] = 1
Za = (Z - mean(Z)) / std(Z)
print Za[0]
>>> 21.1905669677
除了格式在 Python 中显示更多的数字之外,还有一个巨大的差异(恕我直言),超过 0.02
Python 和 Matlab 都使用 64 位数据类型 (afaik)。Python 使用 'numpy.float64' 和 Matlab 'double'。
为什么差异如此之大?哪一个更正确?