Я знаю об основных типах данных и о том, что типы с плавающей точкой (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
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, есть огромная разница (imho), больше чем 0,02
Оба Pythonи Matlab используют 64-битный тип данных (afaik).Python использует 'numpy.float64' и Matlab 'double'.
Почему такая огромная разница?Какой из них более правильный?