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

时间:2018-04-10 21:01:42

标签: javascript arrays d3.js reduce

我有大约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);

'队列'是一个对象数组。我想隔离' bins'每个群组对象中的数组。每个都是117个元素长。对于每个箱[i],我想从所有箱子中得到[i]的平均值。我想基本上将300个数组117的数组转换成一个117个数组的数组。任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:4)

D3已经有一个名为d3.mean的方法,其中包含:

  

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

因此,如果你想获得每个内部数组的均值,你只需要这个(其中data是你的原始数组):

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

这是一个基本演示:



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)

<script src="https://d3js.org/d3.v5.min.js"></script>
&#13;
&#13;
&#13;

但是,您的数据结构现在还不是很清楚:代码段上方的描述(&#34;我有大约300个数组,每个数组都有100个x和y值数组&#34; )与摘录下面的描述不同(&#34;&#39; cohort&#39;是一个对象数组。我想在每个同类群组对象中隔离&#39; bins&#39;数组。每个都是117个元素长。&#34; )!这很令人困惑......

因此,假设您有一个数组数组,并且每个内部数组中有两个值[x, y],这就是d3.mean这两种方法的用法,一个用于{ {1}}值和x值的其他值:

y

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

var arrayOfMeans = [d3.mean(data.map(d => d[0])), d3.mean(data.map(d => d[1]))];

以下是演示:

&#13;
&#13;
var arrayOfMeans = d3.range(2).map(d => d3.mean(data.map(e => e[d])));
&#13;
var data = [
  [1, 100],
  [2, 200],
  [3, 300]
];

var arrayOfMeans = [d3.mean(data.map(d => d[0])), d3.mean(data.map(d => d[1]))]

console.log(arrayOfMeans)
&#13;
&#13;
&#13;

答案 1 :(得分:0)

已经有了如何计算JS中数组平均值的答案:

Finding the average of an array using JS

您可以使用该答案中定义的函数,并将其映射到数组数组中。例如:

var result = cohort.map(cohortElement => cohortElement.bin).map(/*function declared in other StackOverflow answer*/)

答案 2 :(得分:0)

在ForEach和array reduce方法的选项下方实现预期用途

  1. 首先使用array.ForEach方法

  2. 为300个数组创建循环
  3. 每个数组的内部循环,我使用reduce来查找平均值

  4. p {white-space: normal; }
    

    我创建了长度为300的样本数组,每个数组都有2个用于测试的数组

    代码示例 - https://codepen.io/nagasai/pen/eMXNMZ?editors=1010