私は基本的なデータ型について知っており、float 型 (float、double) はいくつかの数値を正確に保持できないことを知っています。
ただし、コードを Matlab から Python (Numpy) に移植する際に、計算に大きな違いがあることがわかりました。
最初の 2 つの要素だけがゼロ以外の値を持つ 500 次元のベクトルを z 正規化する次のコードを見てください。
マトラブ:
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でもう少し多くの数字を示していることに加えて、0.02以上の大きな違いがあります(imho)
Python と Matlab の両方が 64 ビット データ型を使用しています (afaik)。Python は「numpy.float64」と Matlab の「double」を使用します。
なぜこんなに差が大きいのでしょうか?どちらがより正しいですか?