12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- /**
- * Copyright (c) 2018-2019 mol* contributors, licensed under MIT, See LICENSE file for more info.
- *
- * @author Alexander Rose <alexander.rose@weirdbyte.de>
- */
- import { NumberArray } from './type-helpers';
- // TODO move to mol-math as Vector???
- /** Get the maximum value in an array */
- export function arrayMax(array: ArrayLike<number>) {
- let max = -Infinity
- for (let i = 0, il = array.length; i < il; ++i) {
- if (array[i] > max) max = array[i]
- }
- return max
- }
- /** Get the minimum value in an array */
- export function arrayMin(array: ArrayLike<number>) {
- let min = Infinity
- for (let i = 0, il = array.length; i < il; ++i) {
- if (array[i] < min) min = array[i]
- }
- return min
- }
- /** Get the sum of values in an array */
- export function arraySum(array: ArrayLike<number>, stride = 1, offset = 0) {
- const n = array.length
- let sum = 0
- for (let i = offset; i < n; i += stride) {
- sum += array[i]
- }
- return sum
- }
- /** Get the mean of values in an array */
- export function arrayMean(array: ArrayLike<number>, stride = 1, offset = 0) {
- return arraySum(array, stride, offset) / (array.length / stride)
- }
- /** Get the root mean square of values in an array */
- export function arrayRms(array: ArrayLike<number>) {
- const n = array.length
- let sumSq = 0
- for (let i = 0; i < n; ++i) {
- const di = array[i]
- sumSq += di * di
- }
- return Math.sqrt(sumSq / n)
- }
- /** Fill an array with serial numbers starting from 0 until n - 1 (defaults to array.length) */
- export function fillSerial<T extends NumberArray> (array: T, n?: number) {
- for (let i = 0, il = n ? Math.min(n, array.length) : array.length; i < il; ++i) array[i] = i
- return array
- }
- export function arrayRemoveInPlace<T>(xs: T[], x: T) {
- let i = 0, l = xs.length, found = false;
- for (; i < l; i++) {
- if (xs[i] === x) {
- found = true;
- break;
- }
- }
- if (!found) return false;
- i++;
- for (; i < l; i++) {
- xs[i - 1] = xs[i];
- }
- xs.pop();
- return true;
- }
|