LoginSignup
4
5

More than 3 years have passed since last update.

numpyとpandasの分散を求めるメソッドの違い

Posted at

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で微妙に違いがあったという罠。
統一してほしいものですが、もしかしたら誰かがはまっていたときのことを思ってメモを公開しておきます。

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5