我了解基本数据类型,并知道浮点数类型(float,double)不能精确地存储某些数字。
在将一些代码从Matlab移植到Python(Numpy)时,我发现计算结果存在显著差异,我认为这与精度有关。
考虑以下代码,对一个500维向量进行z-score标准化,只有前两个元素具有非零值。
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:
->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位数据类型(据我所知)。Python使用“numpy.float64”,而Matlab使用“double”。
为什么差异如此之大?哪个更正确?