Sha256: 33ebf849d50c5402bc63ce7107abbf0ff34ec86d8869093f3c51d189de8c12ca

Contents?: true

Size: 1.29 KB

Versions: 1

Compression:

Stored size: 1.29 KB

Contents

require 'linalg'


module Linalg
   class DMatrix
      #
      # Pseudo-inverse.
      #
      # For matrix +m+, find +x+ which minimizes
      #   (m*x - DMatrix.identity(m.vsize)).norm
      #
      def pseudo_inverse(epsilon = nil)
         DMatrix.fit(self, DMatrix.identity(vsize))
      end
      
       def middle_row
         startA=([0]*columns.entries.length)
         start=DMatrix[startA]
         
         rows.entries.inject(start){|old,new|
           old+new
         }/rows.entries.length
       end
       def middle_col
         startA=([[0]]*rows.entries.length)
         start=DMatrix[*startA]
         
         columns.entries.inject(start){|old,new|
           old+new
         }/columns.entries.length
       end
      
      def covariance
        m=middle_row
        colCount=self.columns.entries.length
        rowCount=self.rows.entries.length
        r=(0...colCount).to_a.map{|y|
            (0...colCount).to_a.map{|x|
              (0...rowCount).inject(0) {|old,c|
                old+(self[c,y]-m[0,y])*(self[c,x]-m[0,x])
              }/rowCount
            }
        }
        DMatrix[*r]
      end
      
      def cut(w,h)
        r=(0...h).to_a.map{|y|
          (0...w).to_a.map{|x|
            self[y,x]
          }
        }
        DMatrix[*r]
      end
      
   end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
appswarm-0.0.1 lib/appswarm/routing/matrix_math.rb