[解決済み] なぜnumpyのstd()はmatlabのstd()と異なる結果を出すのですか?
質問
matlabのコードをnumpyに変換しようとして、numpyがstd関数と異なる結果を持っていることが分かりました。
matlabで
std([1,3,4,6])
ans = 2.0817
numpyで
np.std([1,3,4,6])
1.8027756377319946
これは正常ですか?また、どのように対処すればよいのでしょうか?
どのように解決するのですか?
NumPyの関数
np.std
はオプションのパラメータ
ddof
: "Delta Degrees of Freedom"です。デフォルトでは、これは
0
. に設定します。
1
に設定すると、MATLABの結果が得られます。
>>> np.std([1,3,4,6], ddof=1)
2.0816659994661326
もう少し文脈を補足すると、分散(標準偏差は平方根である)の計算では、通常、持っている値の数で割ります。
しかし、もし私たちが無作為に選んだ
N
の要素を大きな分布からランダムに選び、分散を計算すると
N
で割ると、実際の分散が過小評価される可能性があります。これを修正するには、割り算する数値を下げます (
自由度
)よりも小さい数にします。
N
(通常
N-1
). は
ddof
パラメータを使うと、指定した量だけ除数を変更することができます。
特に指示がない限り、NumPy は
偏った
を計算します。
ddof=0
で割ると
N
). これは、分布全体(より大きな分布からランダムに選ばれた値のサブセットではない)を扱っている場合に必要なものです。もし
ddof
パラメータが与えられている場合、NumPy は
N - ddof
で割る。
MATLABのデフォルトの動作である
std
で割ることにより、標本分散のバイアスを補正します。
N-1
. これは標準偏差の偏りの一部(しかしおそらくすべてではありません)を取り除きます。これは、より大きな分布のランダムなサンプルでこの関数を使用する場合に必要なものです。
hbadertsによる素晴らしい回答は、さらなる数学的な詳細を与えてくれます。
関連
-
[解決済み] 関数デコレータを作成し、それらを連鎖させるには?
-
[解決済み] バイトを文字列に変換する
-
[解決済み] 最小限の驚き」と「変更可能なデフォルトの引数
-
[解決済み] Python 3で「1000000000000000 in range(1000000000000001)」はなぜ速いのですか?
-
[解決済み] モジュールの関数名(文字列)を使って、モジュールの関数を呼び出す。
-
[解決済み] なぜC++はPythonよりもstdinからの行の読み込みが遅いのですか?
-
[解決済み] インスタンスのクラス名を取得する?
-
[解決済み] と'is'のどちらかを使って文字列を比較すると、異なる結果になることがあるのはなぜですか?
-
[解決済み] シェルコマンドの実行と出力のキャプチャ
-
[解決済み] 認証プラグイン 'caching_sha2_password' はサポートされていません。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 2つの線分が交差しているかどうかを確認するにはどうすればよいですか?
-
[解決済み] pandasのDataFrameから空のセルを含む行を削除する
-
[解決済み] なぜ(0-6)は-6=偽なのか?重複
-
[解決済み] ファブリック経由でデプロイユーザとしてvirtualenvを有効化する
-
[解決済み] if 節の終了方法
-
[解決済み] Pythonの検索パスを他のソースに展開する
-
[解決済み] Pythonでファイルの読み込みと上書きをする
-
[解決済み] あるメソッドが複数の引数のうち1つの引数で呼び出されたことを保証する
-
[解決済み] pipの依存性/必要条件をリストアップする方法はありますか?
-
[解決済み] Alembicアップグレードスクリプトでインサートやアップデートを実行するにはどうすればよいですか?