mean function

List<double> mean(
  1. List<List<num>> values, {
  2. int? axis,
})

Computes the mean along a specified axis.

Implementation

List<double> mean(List<List<num>> values, {int? axis}) {
  if (values.isEmpty) {
    return [double.nan]; // Return NaN for empty lists
  }

  if (axis == null) {
    final List<num> flattenedValues = values.expand((list) => list).toList();
    final num total = flattenedValues.reduce((a, b) => a + b);
    return [total / flattenedValues.length];
  } else if (axis == 0) {
    final List<num> columnSums = List<num>.filled(values[0].length, 0);
    for (List<num> row in values) {
      for (int i = 0; i < row.length; i++) {
        columnSums[i] += row[i];
      }
    }
    return columnSums.map((sum) => sum / values.length).toList();
  } else if (axis == 1) {
    return values
        .map((row) => row.reduce((a, b) => a + b) / row.length)
        .toList();
  } else {
    throw ArgumentError("Axis must be null, 0, or 1.");
  }
}