UNPKG

molstar

Version:

A comprehensive macromolecular library.

111 lines 3.91 kB
"use strict"; /** * Copyright (c) 2018-2019 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author Alexander Rose <alexander.rose@weirdbyte.de> */ Object.defineProperty(exports, "__esModule", { value: true }); exports.Matrix = void 0; var Matrix; (function (Matrix) { function create(cols, rows, ctor) { if (ctor === void 0) { ctor = Float32Array; } var size = cols * rows; return { data: new ctor(size), size: size, cols: cols, rows: rows }; } Matrix.create = create; /** Get element assuming data are stored in column-major order */ function get(m, i, j) { return m.data[m.rows * j + i]; } Matrix.get = get; /** Set element assuming data are stored in column-major order */ function set(m, i, j, value) { m.data[m.rows * j + i] = value; return m; } Matrix.set = set; /** Add to element assuming data are stored in column-major order */ function add(m, i, j, value) { m.data[m.rows * j + i] += value; return m; } Matrix.add = add; /** Zero out the matrix */ function makeZero(m) { m.data.fill(0.0); return m; } Matrix.makeZero = makeZero; function clone(m) { return { data: m.data.slice(), size: m.size, cols: m.cols, rows: m.rows }; } Matrix.clone = clone; function fromArray(data, cols, rows) { return { data: data, size: cols * rows, cols: cols, rows: rows }; } Matrix.fromArray = fromArray; function transpose(out, mat) { if (out.cols !== mat.rows || out.rows !== mat.cols) { throw new Error('transpose: matrix dimensions incompatible'); } if (out.data === mat.data) { throw new Error('transpose: matrices share memory'); } var nrows = mat.rows, ncols = mat.cols; var md = mat.data, mtd = out.data; for (var i = 0, mi = 0, mti = 0; i < nrows; mti += 1, mi += ncols, ++i) { var ri = mti; for (var j = 0; j < ncols; ri += nrows, j++) mtd[ri] = md[mi + j]; } return out; } Matrix.transpose = transpose; /** out = matA * matB' */ function multiplyABt(out, matA, matB) { var ncols = matA.cols, nrows = matA.rows, mrows = matB.rows; var ad = matA.data, bd = matB.data, cd = out.data; for (var i = 0, matAp = 0, outP = 0; i < nrows; matAp += ncols, i++) { for (var pB = 0, j = 0; j < mrows; outP++, j++) { var sum = 0.0; var pMatA = matAp; for (var k = 0; k < ncols; pMatA++, pB++, k++) { sum += ad[pMatA] * bd[pB]; } cd[outP] = sum; } } return out; } Matrix.multiplyABt = multiplyABt; /** Get the mean of rows in `mat` */ function meanRows(mat) { var nrows = mat.rows, ncols = mat.cols; var md = mat.data; var mean = new Array(ncols); for (var j = 0; j < ncols; ++j) mean[j] = 0.0; for (var i = 0, p = 0; i < nrows; ++i) { for (var j = 0; j < ncols; ++j, ++p) mean[j] += md[p]; } for (var j = 0; j < ncols; ++j) mean[j] /= nrows; return mean; } Matrix.meanRows = meanRows; /** Subtract `row` from all rows in `mat` */ function subRows(mat, row) { var nrows = mat.rows, ncols = mat.cols; var md = mat.data; for (var i = 0, p = 0; i < nrows; ++i) { for (var j = 0; j < ncols; ++j, ++p) md[p] -= row[j]; } return mat; } Matrix.subRows = subRows; })(Matrix || (Matrix = {})); exports.Matrix = Matrix; //# sourceMappingURL=matrix.js.map