module Apate

Constants

VERSION

Public Class Methods

add(element, value) click to toggle source
# File lib/apate/array_methods.rb, line 7
def self.add(element, value)
  self.element_wise_computing(:+, element, value)
end
average(arr) click to toggle source
# File lib/apate/basic_methods.rb, line 3
def self.average arr
  self.sum(arr).to_f / arr.length
end
covariance(x, y) click to toggle source
# File lib/apate/multi_set_methods.rb, line 3
def self.covariance x, y
  xl = x.length
  yl = y.length

  return unless xl == yl

  xm = self.average x
  ym = self.average y

  self.scalar_product(self.subtract(x, xm), self.subtract(y, ym))/(xl.to_f - 1)
end
determinant(a) click to toggle source
# File lib/apate/matrix_methods.rb, line 23
def self.determinant(a)
  am = Matrix.new(a)
  det = am.determinant

  det
end
divide(element, value) click to toggle source
# File lib/apate/array_methods.rb, line 15
def self.divide(element, value)
  self.element_wise_computing(:/, element, value.to_f)
end
invert_matrix(a) click to toggle source
# File lib/apate/matrix_methods.rb, line 17
def self.invert_matrix(a)
  am = Matrix.new(a)
  am.invert.data
end
matrix_add(a, b) click to toggle source
# File lib/apate/matrix_methods.rb, line 10
def self.matrix_add(a, b)
  am = Matrix.new(a)
  bm = Matrix.new(b)

  (am+bm).data
end
matrix_multiply(a, b) click to toggle source
# File lib/apate/matrix_methods.rb, line 3
def self.matrix_multiply(a, b)
  am = Matrix.new(a)
  bm = Matrix.new(b)

  (am*bm).data
end
median(arr) click to toggle source
# File lib/apate/basic_methods.rb, line 18
def self.median arr
  sorted_arr = arr.sort
  length = arr.length
  if length % 2 == 0
    self.average(sorted_arr[length/2-1..length/2])
  else
    sorted_arr[(length-1)/2]
  end
end
mode(arr) click to toggle source
# File lib/apate/basic_methods.rb, line 29
def self.mode arr
  freq = arr.inject(Hash.new(0)) { |h,v| h[v] += 1; h }
  arr.max_by { |v| freq[v] }

end
multiply(element, value) click to toggle source
# File lib/apate/array_methods.rb, line 11
def self.multiply(element, value)
  self.element_wise_computing(:*, element, value)
end
pow(element, value) click to toggle source
# File lib/apate/array_methods.rb, line 19
def self.pow(element, value)
  self.element_wise_computing(:**, element, value.to_f)
end
scalar_product(x, y) click to toggle source
# File lib/apate/array_methods.rb, line 24
def self.scalar_product x, y
  return unless x.length == y.length
  value = 0

  x.each_with_index do |xi, i|
    value += xi*y[i]
  end

  value
end
subtract(element, value) click to toggle source
# File lib/apate/array_methods.rb, line 3
def self.subtract(element, value)
  self.element_wise_computing(:-, element, value)
end
sum(arr) click to toggle source
# File lib/apate/basic_methods.rb, line 7
def self.sum arr
  arr.inject { |sum, el| sum + el }
end
variance(arr) click to toggle source
# File lib/apate/basic_methods.rb, line 11
def self.variance arr
  m = self.average arr

  arr = self.subtract(arr, m)
  self.scalar_product(arr, arr).to_f/(arr.length-1)
end

Private Class Methods

element_wise_computing(method, elements, value) click to toggle source
# File lib/apate/array_methods.rb, line 38
def self.element_wise_computing method, elements, value
  if elements.kind_of?(Array)
    elements.map do |e|
      self.element_wise_computing(method, e, value)
    end
  else
    elements.send(method, value)
  end
end