@graphty/layout
Version:
graph layout algorithms based on networkx
101 lines • 3.07 kB
JavaScript
/**
* 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