Rにたくさんさいころを振らせて、さいころの分散を求めてみる

前回記事Rにさいころをたくさん振らせて、さいころの平均を求めてみる - わかばめにっきでは、Rの擬似乱数を使って標本平均が母平均の一致推定量であることを示しました。今回は後で述べる不偏標本分散という量が母分散の不偏推定量であることを調べていきます。

続きを読む

Rにさいころをたくさん振らせて、さいころの平均を求めてみる

最近は東京大学出版会の統計学入門を用いて、統計学に再入門しています。標本分散の定義に  n-1 が出てくるのはなぜだっけ?というところからよくわかっていなかったので、何回かに分けてその理由をメモしていきます。
推定とはなにかというところから出発します。若干迂遠に感じられるかもしれませんが、間違い探しだと思ってお付き合いください。

      • -

確率的に変動する要素がある場合、わたしたちはその変動をできるだけ正確に見積もりたいのに対して、厳密に調べつくすことは現実的ではないという問題に遭遇します。
例えばさいころを振ることを考えても、実際にはわたしたちは有限回しかさいころを振るという行動はできません。
したがって、「理想的なさいころであればそれぞれの目が出る確率は  \frac16 になるはずだ」ということに対して、手元にあるさいころの背後にある確率分布を精密に調べることは不可能です。
そうであれば、実験、調査、測定などによって得られたデータ(これを標本と呼ぶ)のどのような性質を見れば、確率分布の持つ平均分散などといった特徴(これを母数と呼ぶ)を調べられるでしょうか?また、性質の見方には指標があるでしょうか?ということを考える必要が生じます。
この記事群では一致推定量不偏推定量という観点から、母平均と母分散を"推定"することを考えていきます。*1

*1:実は個人的に計算でつまづいたところがあったので、自分用メモの側面もあります。

続きを読む

Python で波動方程式の数値計算と動画 gif の書き出しをやらせてみよう

2次元正方形領域における波動方程式の初期値境界値問題を考えます。
こんな感じで波が伝播していく様子を気軽にシミュレーションできます。
f:id:wakabame:20180307201626g:plain

続きを読む

競技プログラミングにおける Python での標準入出力のまとめ

入力

1行に1要素の場合

N = int(input())
  • 文字列
S = input()

1行にスペース区切りで複数要素の場合

  • 2つの数字を別の変数 N, M に
N, M = map(int, input().split())
  • 2つの文字列を別の変数 S, T に
S, T = map(str, input().split())
  • 複数の数字をリスト A に
A = list(map(int, input().split()))

複数行に1要素がある場合

  • 複数の数字をリスト A に
A = [int(input()) for _ in range(N)]
  • 複数の文字列をリスト A に
A = [input() for _ in range(N)]

複数行にスペース区切りで複数要素の場合

  • 複数の数字をリスト A に
A = [list(map(int, input().split())) for _ in range(N)]

A[i][j] は  i+1 行目の j+1 文字目を表す

出力

1要素の出力

  • 文字列または数字 A を改行つきで表示
print(A)

複数要素の出力

  • リスト A を1要素ごとに改行して出力
[print(A[i]) for i in range(N)]
  • リスト A を空白区切りで出力
print(*A)
  • リスト A をカンマ区切りで出力
print(', '.join(map(str, A)))

ABC088 を Julia で解いてみる

先ほどまで開催されていた AtCoder の ABC088 に参加してみました。
問題や解説についてはリンク先をご覧ください。
abc088.contest.atcoder.jp
最近は数値計算をしてみたいなと思うところがあり、Julia の勉強を始めていました。
というわけで、使い慣れてきた Python と Julia の二つで解いていきました。

続きを読む

競技プログラミングを始めて6ヶ月が経ちました

最近はブログの更新も競プロへの出場も疎かになってしまいました。と同時に5月のゴールデンウィークに行われた AtCoder の AGC014 に初めて競技プログラミングのコンテストに参加してから半年が経ってしまいました。というわけで短い期間を振り返ろうと思います。

就職活動をするに当たって、Pythonを効率よく勉強する手段として採用したのが競技プログラミングを始めたきっかけです。何しろそれまでのプログラミング経験は大学1回生の時にC++を触ったことがあるという程度で、インターンなどをやってきた学生と渡り合う方法がありませんでした。録にプログラミングを書けない学生のまま面接をパスできるとは到底思えませんでしたし、そんな状態からいち早く抜けるために、"流行り"の機械学習分野と親和性のあるPythonを勉強して面接時の話題づくりになればいいかなくらいの気持ちで取り掛かりました。

2-3ヶ月位Pythonの基本的な文法や競技プログラミングの練習問題を解いて、5月から参加してみました。


初回の参加でしたが2問解くことが出来たのがうれしかった一方で、ルールがよくわからず何度も誤答を提出してしまっているのが微笑ましいですね。

AtCoderは最初の数回はレートが低く計算される方法を採用しているようで、回を増すごとにレートが上がる感じがして楽しかったです。

一方でパフォーマンスはほとんど向上していません…。そもそも純粋な勉強量が足りていないのですが、問題を通して復習をしても本番になるとひとつレベルの高い問題に手を付けられていないという印象があります。
どうやら ABC の D 問題クラスを安定して解けるようになることが次の目標のようです。グラフや動的計画法についてのアルゴリズムを総ざらいしたり、データ構造を理解して上手く使う、経験とひらめきでなんとかやっていくなどの工夫が必要な水準に近づいて来ているように思います。