const M = { Iterate: { Loop: (inDimensions, inCount, inFunction)=> { let i, j, outputVector; const outputCloud = []; for(i=0; row inCloud.map(row=>row.map(inFunction)) }, Create: { Box: (inV1, inV2, inCount)=> M.Iterate.Loop(inV1.length, inCount, i=> inV1[i]+(inV2[i]-inV1[i])*Math.random()), Transpose: (inCloud)=> M.Iterate.Loop(inCloud.length, inCloud[0].length, (i, row)=> inCloud[i][row]), Outer: (inV1, inV2)=> M.Iterate.Loop(inV1.length, inV2.length, (i, row)=> inV1[i]*inV2[row]), Clone: (inCloud)=> M.Iterate.Edit(inCloud, i=> i) }, Mutate: { Pad: inCloud=> inCloud.forEach(row=> row.push(1)), Unpad: inCloud=> inCloud.forEach(row=> row.pop()) }, Single: { Subtract: (inV1, inV2)=> inV1.map((component, i)=> component-inV2[i]), Multiply: (inV1, inV2)=> inV1.map((component, i)=> component*inV2[i]), Affine: (inV, inMatrix)=> inMatrix.map(row=> row.reduce((sum, current, index)=> sum + current*inV[index])) }, Batch: { Subtract: (inCloud1, inCloud2)=> inCloud1.map((row, rowIndex)=> M.Single.Subtract(row, inCloud2[rowIndex])), Multiply: (inCloud1, inCloud2)=> inCloud1.map((row, rowIndex)=> M.Single.Multiply(row, inCloud2[rowIndex])), Affine: (inCloud, inMatrix)=> inCloud.map(row=> M.Single.Affine(row, inMatrix)), Sigmoid: (inCloud)=> M.Iterate.Edit(inCloud, i=>1/(1+Math.pow(Math.E, -i))), Derivative: (inCloud)=> M.Iterate.Edit(inCloud, i=>i*(1-i)), Scale: (inCloud, inScalar)=> M.Iterate.Edit(inCloud, i=>i*inScalar) } } export default M;