Sha256: f03ea6faa1e90fd25a7f28eed8ee60343ae89b790e2f6136373c9037784e6a38
Contents?: true
Size: 1.97 KB
Versions: 2
Compression:
Stored size: 1.97 KB
Contents
class << Mat def hilb(n, type=:float) self.new(n, n, type) do |i, j| 1.quo(i+j+1) end end def load(file) case file when String ret = nil File.open(file) do |f| ret = Marshal.load(f) end ret when IO Marshal.load(file) else raise ArgumentError, 'the argument must be a filepath or an IO object' end end end class Mat def save(file) case file when String File.open(file, 'w') do |f| Marshal.dump(self, f) end when IO Marshal.dump(self, file) else raise ArgumentError, 'the argument must be a filepath or an IO object' end nil end def geo_normalize!(arg=:all) self.log! foo = self.mean(arg) if foo.kind_of?(Mat) self.sub!(self.broadcast(foo)) else self.s_sub!(foo) end self.exp! end def geo_normalize(arg=:all) self.dup.geo_normalize!(arg) end def normalize! if self.vector? self.s_div!(self.normf) elsif self.square? ev = self.eigen_values if ev[0] < 0 self.diag.s_add!(ev[0]*(-2)) ev.s_add!(ev[0]*(-2)) end self.s_div!(Math.exp(ev.log!.mean)) else raise MismatchedDimensionError, "normalize is available only for vectors or square matricies" end end def normalize self.dup.normalize! end end class Array def argsort ret = Array.new(self.size, &:itself) if block_given? ret.sort! do |a, b| yield(self[a], self[b]) end else ret.sort_by! do |elm| self[elm] end end end def argsort!(ary) if block_given? sort! do |a, b| yield(ary[a], ary[b]) end else sort_by! do |elm| self[elm] end end end def argsort_by if block_given? Array.new(self.size, &:itself).sort_by! do |elm| yield(self[elm]) end else self.to_enum(:argsort_by) end end end module Enumerable def argsort(&block) self.to_a.argsort(&block) end def argsort_by(&block) self.to_a.argsort_by(&block) end end class Numeric def limit(min, max) if ( self < min ) then min elsif ( max < self ) then max else self end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
kmat-0.1.0 | lib/kmat/misc.rb |
kmat-0.0.3 | lib/kmat/misc.rb |