Skip to content
Snippets Groups Projects
array.ts 1.60 KiB
/**
 * Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
 *
 * @author Alexander Rose <alexander.rose@weirdbyte.de>
 */

// TODO move to mol-math as Vector???

/** Get the maximum value in an array */
export function arrayMax(array: Helpers.NumberArray) {
    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: Helpers.NumberArray) {
    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: Helpers.NumberArray, 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: Helpers.NumberArray, 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: Helpers.NumberArray) {
    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 */
export function fillSerial<T extends Helpers.NumberArray> (array: T) {
    const n = array.length
    for (let i = 0; i < n; ++i) array[ i ] = i
    return array
}