2009-01-01から1年間の記事一覧

今日のRuby

IRBを起動して、CUIを実装するの巻。 def start puts "start" end def stop puts "stop" end def start_irb require 'irb' require 'irb/completion' IRB.start end start_irb なかでstartやstopをコマンドとして呼ぶことができます。 % ruby test_irb.rb >>…

今日のRuby

コサイン尺度を求めるメソッドをナイーブに実装。 def cosin(array1, array2) p = pair(array1, array2) z = zero(array1.size) return p.map{|i| i[0] * i[1]}.reduce{|i,j| i+j}.to_f / euclidean(array1, z).to_f / euclidean(array2, z).to_f end privat…

今日のRubyその2

距離関数を作ったので、近傍を求めるクラスを作ってみた。ナイーブである。 class Neighborhood def initialize(items, matric) raise unless matric.is_a?(Proc) || matric.is_a?(Method) require 'matrix' unless defined?(Matrix) items = items.to_a if …

今日のRuby

実数直積集合の距離関数(see: wikipedia:距離空間)をナイーブに実装。 module Matric class << self def chebyshev(array1, array2, k) raise "All elements in 'array1' shall be real numbers" unless array1.all?{|i| i.is_a?(Fixnum) || i.is_a?(Float)…

今日のRuby

今日もまた記述統計の基本的な関数群をナイーブに実装。 def normalize(*args) sd = standard_deviasion(args) m = mean(args) return args.flatten.map{|i| (i - m) / sd } end def skewness(*args) return normalize(args).reduce{|i,j| i + j ** 3} / (ar…

今日のRuby

記述統計の基本的な関数群 module Statistics class << self def mean(*args) return args.flatten.reduce{|i, j| i + j}.to_f / args.flatten.length end def median(*args) numbers = args.flatten.sort if numbers.size % 2 == 0 m = numbers.size / 2 - …

今日のRuby

Monitorの練習 require 'thread' require 'monitor' $found = [] $monitor = Monitor.new def have_found?(i) $monitor.synchronize do return $found.include?(i) end end tg = [] 3.times{ tg << Thread.new{ while $found.length < 100 i = rand(100) if …

Rubyで"1 hour 30 minutes"を秒に変換するクラスを書いた

既にあるのかもしれませんが、 タイトルの通り、"1 hour 30 minutes"といったような表現を秒に変えるクラスを書いてみました。 次の例のように使います。 parser = IntervalExpressionParser.new str = "1hour 30minutes" p parser.parse(str) # => 5400 使…

LDAPでの曖昧検索

% ldapsearch -x '(uid=ch*)' uidこれでuidがchではじまるユーザが表示されます。'*' がシェルのワイルドカードと同じ意味を持ちます。LDAPの検索filterの書き方はRFC4515(http://www.ietf.org/rfc/rfc4515.txt)に規定されています。 詳しくはそちらをどうぞ…

今日のirb

>> "a".method(:downcase) => # >> "a".method(:downcase).call => "a" >> "a".method(:upcase).call => "A" "a".metohods(:downcase) で、"a"オブジェクトのdowncaseメソッドへの参照を得ている。そこから参照されているMethodオブジェクトのcallメソッドを…

gem install mysql on Snow Leopard

Snow Leopardでgemからインストールしたmysqlドライバを使おうとすると、 uninitialized constant MysqlCompat::MysqlRes のようなエラーをはいて動きません。http://journal.mycom.co.jp/news/2009/09/01/033/index.html によると、32bitでコンパイルされて…

集合知プログラミング第6章 解説

プログラム概要は下図の通り.分類対象を受け取って,それを特徴に分解するFeature extractorと,その結果を受け取って分類を行うClassifierの二つを実装することになります.前者はgetwordsという関数として,後者はclassifierというクラスとして実装してい…

集合知プログラミング第6章 実装

集合知プログラミング第6章のサンプルほぼそのままだけれど.違う点はアイテムがクラスに属する確率をそのままつかって分類するのではなく,その確率の対数を使っている点.小数点以下の桁が大きくなるのは嫌なものですからね.ソースはこんな感じ. import…

集合知プログラミング第6章 準備

テキストフィルタリングから始めます.最初は環境を整えるところから.PythonからSQLiteをつかえるようにします. Pythonをインストール 2.5を入れておくと,標準で使えるライブラリがたくさんあって何かと便利なようです.Finkだと"python25"というパッケー…

集合知プログラミングはじめました

はじめましたと書きましたが,実はずいぶん前から読んでました.その結果をちまちまとあげてく予定です.

論文を書いているとき、「後で書くかー」と思って「(後で続きを書く)」と書いておいても、いざ論文が完成したときに漏れがあると恥ずかしい…… by id:sekido (http://blog.c--v.net/2008/12/27/1)というのを読んで,かっとなって作りました: http://gist.gi…