const map = require('lodash/map') const reduce = require('lodash/reduce') const validateLengths = (a,b,action) => { if (a.length !== b.length) { throw Error(`Can\'t ${action} arrays of length ${a.length} and ${b.length}`); } } const arrayMultiply = (arr1, arr2) => { validateLengths(arr1,arr2,"mutliply") return arr1.reduce((accumulator, arrayItem, i) => accumulator += arrayItem * arr2[i] , 0) } const arrayAdd = (arr1, arr2) => { validateLengths(arr1, arr2, "add") return arr1.map((arrayItem,i) => arrayItem + arr2[i] ) } const arraySubtract = (arr1, arr2) => { validateLengths(arr1, arr2, "subtract") return arr1.map((arrayItem,i) => arrayItem - arr2[i] ) } const sigmoid = (z) => 1 / (1 + Math.exp(z * -1)) const sigmoidGradient = (z) => sigmoid(z) * (1 - sigmoid(z)) const sigmoidInverse = (a) => Math.log(a) - Math.log(1 - a) exports.arrayMultiply = arrayMultiply; exports.arrayAdd = arrayAdd; exports.arraySubtract = arraySubtract; exports.sigmoid = sigmoid; exports.sigmoidGradient = sigmoidGradient; exports.sigmoidInverse = sigmoidInverse;