こんにちは。
夏なのでRubyを書きたくなりました。
今回はこの本の第2章ベイズ更新について書いてみました。
詳細は本文に当たっていただけると良いかと思います。
コードは以下のリポジトリで公開しています。
Jupyter NotebookでRubyを使ってみました。
好奇心ドリブンな日々の記録
こんにちは。
夏なのでRubyを書きたくなりました。
今回はこの本の第2章ベイズ更新について書いてみました。
詳細は本文に当たっていただけると良いかと思います。
コードは以下のリポジトリで公開しています。
Jupyter NotebookでRubyを使ってみました。
以下をコピペして実行してください。
[shell]
# 必要なものをyumる
sudo yum install -y git gcc libffi-devel zlib-devel gdbm-devel ncurses-devel openssl-devel readline-devel
# rbenvをクローンしてくる
sudo git clone https://github.com/sstephenson/rbenv.git /usr/local/src/rbenv
sudo git clone https://github.com/sstephenson/ruby-build.git /usr/local/src/rbenv/plugins/ruby-build
# 読み込み用のスクリプト用意
touch /etc/profile.d/rbenv.sh
echo ‘export RBENV_ROOT="/usr/local/src/rbenv/"’ /etc/profile.d/rbenv.sh
echo ‘export PATH="${RBENV_ROOT}/bin:${PATH}"’ /etc/profile.d/rbenv.sh
echo ‘eval "$(rbenv init -)"’ /etc/profile.d/rbenv.sh
# 確認
cat ~/etc/profile.d/rbenv.sh
# スクリプトの読み込み
source ~/etc/profile.d/rbenv.sh
# 確認
rbenv –version
# Rubyのインストール
# インストール可能なバージョン確認
rbenv install -l
# インストールしたいバージョンをインストールして設定
rbenv install 2.2.4
rbenv global 2.2.4
# 確認
ruby -v
# gem類
gem update –system
gem install bundler
gem install rake
[/shell]
とりあえず、これでRubyが使えるようになるはずです。
先日こんな記事を書きました。
[Ruby]配列のデフォルト値を0にする | INFORMATICS FINDER
この記事では、Rubyのデフォルト値を0で初期化するためにはどうすれば良いか
ということを書いていました。
まあ、Fixum#to_iを使ったらいいのではないかということで〆めています。
しかし先ほどこんなものを見つけました。
Can I create an array in Ruby with default values? | Stack Overflow
ちなみに、リンク先はプログラマー用のQ&Aサイトで
「Rubyで配列を作成する際にデフォルト値を設定するにはどうすれば良いか?」
という質問内容です。様々な解答が寄せられています。
わぉ。すでに議論されていたとは…。
しかも4年前…。
to_iメソッドで「0」に初期化できる!すごいこと思いついた!と思ったのですが、とうの昔に既出でした。
まあ、rubyは車輪の再発明も推奨している文化ではあるのですが、4年も遅れた情報を嬉々としてブログに掲載してしまうのはお恥ずかしいあまりです。
英語圏にも目を向けなくてはならないということを痛感しました。
どうもこんにちは,Rubyを使っていてハッシュみたいにある要素にアクセスしたときに値が存在しない場合のデフォルト値を設定できれば嬉しいなと思っていたのですが,どうもそういう機能がないようなので,0に初期化する方法を見つけました。
要は無限の要素に対して0で初期化したいわけです。
a = Array.new(,0)
5.times{|i| a[i] += 1}
p a => [1, 1, 1, 1, 1]
みたいなことがしたいわけです。
※もちろんこんな書き方はありません。
ぱっと考え付くのは,if文などを使って条件わけをすることですが,
そんなの全然スマートじゃない!
というわけで・・・
考えてみました。
今回注目したのは,
「nilに対して#to_iを行うと0になる」
という性質です。
これを使って,書くと
a = Array.new()
5.times{|i| a[i] = a[i].to_i + 1}
p a => [1, 1, 1, 1, 1]
みたいにワンラインで書くことができます。
※これはちゃんと動きます。
なので,if文とかで2行以上やりたくないときは使ってみてください。
まあ,2回目以降は数値に対して#to_iメソッドを使ってるのでエレガントではないですね・・・。
2015/9/19(土)追記
後で知ったのですが、Integer#to_iメソッドはselfを返すらしいので
この書き方はあながち間違ってないかもしいれないですね~。
→http://docs.ruby-lang.org/ja/2.1.0/class/Integer.html#I_TO_I
rubyでメソッド名と変数名が被ったらどうなるのか気になったので、試してみました。
[ruby]
def sample()
return "sample"
end
p sample
sample = "not method"
p sample
[/ruby]
の実行結果は
Rubyで巡回セールスマン問題を解こうと思いプログラミングをしてみました。
とりあえず、難しいことは考えずに、単純な方法でやってみました。
以下、アルゴリズムと言うにはあまりに単純な方法。