Skip to content

Instantly share code, notes, and snippets.

Created July 9, 2014 22:01
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/150bfe1702811808dbf3 to your computer and use it in GitHub Desktop.
Save anonymous/150bfe1702811808dbf3 to your computer and use it in GitHub Desktop.
correlate = (xs, ys) ->
covariance(xs, ys) / (stdDev(xs) * stdDev(ys))
covariance = (xs, ys) ->
[mx, my] = [mean(xs), mean(ys)]
mean zipWith xs, ys, (x, y) -> (x - mx) * (y - my)
stdDev = (xs) ->
mx = mean(xs)
Math.sqrt mean map xs, (x) -> Math.pow x - mx, 2
mean = (xs) ->
sum(xs) / xs.length
sum = (xs) ->
xs.reduce(((a, b) -> a + b), 0)
zipWith = (xs, ys, fn) ->
map zip(xs, ys), ([x, y]) -> fn(x, y)
zip = (xs, ys) ->
map range(Math.min(xs.length, ys.length)), (i) -> [xs[i], ys[i]]
map = (xs, fn) ->
xs.map fn
range = (start, stop=start, step=1) ->
start = 0 if arguments.length == 1
[start/step...stop/step].map (i) -> Math.floor i * step
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment