TL;DR
numpyとpandasの分散処理をしていて、両者が一致しないのでなんで?となったのでメモを残しておきます。
numpyとpandasのvarを求めるメソッドの結果はデフォルト値だと一致しない
簡単にrandomに生成した行列を用いてテストします。実際に一致しません。
import numpy as np
import pandas as pd
X = np.random.randn(10, 10)
df = pd.DataFrame(data=X)
np.allclose(X, df.values)
# True
X_var = np.var(X, axis=1)
df_var = df.var(axis=1)
np.allclose(X_var, df_var.values)
# False
実際にドキュメントを調べてみると、numpy.varではデフォルトがddof=0
なんですが、pandas.DataFrame.varだとデフォルトがddof=1
になっています。
デフォルト値を揃えると結果は一致します。
X_var_ddof1 = np.var(X, ddof=1, axis=1)
df_var_ddof1 = df.var(axis=1)
np.allclose(X_var_ddof1, df_var_ddof1.values)
# True
計算結果がなんか合わないなーと思っていたら実はnumpyとpandasで微妙に違いがあったという罠。
統一してほしいものですが、もしかしたら誰かがはまっていたときのことを思ってメモを公開しておきます。