UNPKG

@graphty/layout

Version:

graph layout algorithms based on networkx

101 lines 3.07 kB
/** * NumPy-like array manipulation functions * Maintains exact same functionality as original implementation */ export const np = { zeros: function (shape) { if (typeof shape === 'number') { return Array(shape).fill(0); } if (shape.length === 1) { return Array(shape[0]).fill(0); } return Array(shape[0]).fill(0).map(() => this.zeros(shape.slice(1))); }, ones: function (shape) { if (typeof shape === 'number') { return Array(shape).fill(1); } if (shape.length === 1) { return Array(shape[0]).fill(1); } return Array(shape[0]).fill(1).map(() => this.ones(shape.slice(1))); }, linspace: function (start, stop, num) { if (num === 1) { return [start]; } const step = (stop - start) / (num - 1); return Array.from({ length: num }, (_, i) => start + i * step); }, array: function (arr) { return Array.isArray(arr) ? [...arr] : [arr]; }, repeat: function (a, repeats) { const result = []; for (let i = 0; i < repeats; i++) { result.push(...np.array(a)); } return result; }, mean: function (arr, axis = null) { if (axis === null) { const flatArr = Array.isArray(arr[0]) ? arr.flat(Infinity) : arr; const sum = flatArr.reduce((a, b) => a + b, 0); return sum / flatArr.length; } if (axis === 0) { const result = []; const matrix = arr; for (let i = 0; i < matrix[0].length; i++) { let sum = 0; for (let j = 0; j < matrix.length; j++) { sum += matrix[j][i]; } result.push(sum / matrix.length); } return result; } return arr.map(row => np.mean(row)); }, add: function (a, b) { if (!Array.isArray(a) && !Array.isArray(b)) { return a + b; } if (!Array.isArray(a)) { return b.map(val => a + val); } if (!Array.isArray(b)) { return a.map(val => val + b); } return a.map((val, i) => val + b[i]); }, subtract: function (a, b) { if (!Array.isArray(a) && !Array.isArray(b)) { return a - b; } if (!Array.isArray(a)) { return b.map(val => a - val); } if (!Array.isArray(b)) { return a.map(val => val - b); } return a.map((val, i) => val - b[i]); }, max: function (arr) { if (!Array.isArray(arr)) return arr; return Math.max(...arr.flat(Infinity)); }, min: function (arr) { if (!Array.isArray(arr)) return arr; return Math.min(...arr.flat(Infinity)); }, norm: function (arr) { return Math.sqrt(arr.reduce((sum, val) => sum + val * val, 0)); } }; //# sourceMappingURL=numpy.js.map