获取多个数组中给定索引处所有元素的平均值

Soc*_*ers 3 javascript arrays reduce d3.js

我有大约 300 个数组,每个数组都有 100 个 x 和 y 值数组。我想为 300 个数组的 y 值获得一个 100 均值的数组。做这个的最好方式是什么?我相信我应该使用某种减少但有点迷失。这是我到目前为止所拥有的:

let yval = cohort.map((d, i) => {
    let bin = d3.nest()
        .key(function(d) {
            return i;
        })
        .rollup(function(d) {
            return d;
        })
        .entries(d);

    return bin;
});

console.log(yval);
Run Code Online (Sandbox Code Playgroud)

'cohort' 是一个对象数组。我想隔离每个群组对象中的“bins”数组。每个元素的长度为 117 个元素。对于每个 bins[i],我想从所有 bins 中得到 [i] 的平均值。我想基本上把117的300个数组变成一个117个数组。任何帮助将不胜感激!

Ger*_*ado 5

D3 已经有一个名为d3.mean的方法,它:

返回给定数字数组的平均值

因此,如果您想获得每个内部数组的平均值,您只需要这个(data原始数组在哪里):

var arrayOfMeans = data.map(d => d3.mean(d));
Run Code Online (Sandbox Code Playgroud)

这是一个基本的演示:

var arrayOfMeans = data.map(d => d3.mean(d));
Run Code Online (Sandbox Code Playgroud)
var data = [
  [1, 2, 3, 4, 5],
  [10, 20, 30, 40, 50],
  [100, 200, 300, 400, 500]
];

var arrayOfMeans = data.map(d => d3.mean(d));

console.log(arrayOfMeans)
Run Code Online (Sandbox Code Playgroud)

但是,您的数据结构现在不是很清楚:片段上方的描述(“我有大约 300 个数组,每个数组都有 100 个 x 和 y 值数组”)与片段下方的描述(“'cohort' is一个对象数组。我想隔离每个队列对象中的“bins”数组。每个对象都有 117 个元素长。”)!这很混乱...

因此,假设您有一个数组数组,并且在每个内部数组中您有两个值[x, y],这就是您可以如何使用d3.mean这两种方法,一种用于x值,另一种用于y值:

var arrayOfMeans = [d3.mean(data.map(d => d[0])), d3.mean(data.map(d => d[1]))];
Run Code Online (Sandbox Code Playgroud)

或者,如果您不喜欢文字:

var arrayOfMeans = d3.range(2).map(d => d3.mean(data.map(e => e[d])));
Run Code Online (Sandbox Code Playgroud)

这是演示:

<script src="https://d3js.org/d3.v5.min.js"></script>
Run Code Online (Sandbox Code Playgroud)
var arrayOfMeans = [d3.mean(data.map(d => d[0])), d3.mean(data.map(d => d[1]))];
Run Code Online (Sandbox Code Playgroud)