我知道基本的数据类型,浮点类型(float,double)不能完全保留一些数字。
在将一些代码从Matlab移植到Python(Numpy)时,我发现在计算中有一些显着的差异,我认为它将恢复精准。
取下面的代码,z只归一化500维向量,只有前两个元素具有非零值。
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
蟒蛇:
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中显示更多的数字之外,还有一个巨大的差异(imho),大于0.02
Python和Matlab都使用64位数据类型(afaik)。 Python使用’numpy.float64’和Matlab’double’。
为什么差异如此之大?哪一个更正确?