class Array
Public Instance Methods
deepinit()
click to toggle source
初回の特徴量計算に時間がかかるため,事前にキャッシュしておきたい場合に叩くメソッド batch処理する仕様にすればもっと速いけど作りがめんどくなりそう
# File lib/deepselect.rb, line 213 def deepinit self.each do |image| image.to_vector end end
Also aliased as: dinit
deepselect(take: "default", with: "") { |image| ... }
click to toggle source
block内で比較された対象の画像に,いちばん似てる画像を取り出すメソッド
# File lib/deepselect.rb, line 160 def deepselect(take: "default", with: "") return enum_for(__method__) unless block_given? # dselect内かどうかのフラグ # このフラグががtrueだと == をした時に特徴量を返す self.each do |image| image.in_dselect = true end # 特徴量計算 feature_vectors = self.map do |image| result = yield image unless result.class == Float raise "Not a proper value is returned in dselect block" end result end self.each do |image| # 元に戻す image.in_dselect = nil end # 特徴量が大きい順に並べる zipped_image = [self, feature_vectors].transpose.map.with_index{|(image, num),i| [image, num, i]} result = zipped_image.sort_by{|image, num,i| num}.reverse # 指定された引数によって出力を変える if with =~ /sim/ and with =~ /ind/ # 類似度とindex両方出力 # pass elsif with =~ /sim/ # 類似度のみ result = result.map{|image, num,i| [image,num] } elsif with =~ /ind/ # indexのみ result = result.map{|image, num,i| [image,i] } else # どちらも出力しない,imageのみ返す result = result.map{|image, num,i| image } end # 上位いくつ取得する? if take == "default" return result.first end if take == "all" return result end if take.to_i > 0 return result.take(take.to_i) end raise "what is this arg error\ntake: #{take}" #このエラーはどうなのよ end
Also aliased as: dselect