获取多个数组中给定索引处所有元素的平均值
Get mean of all elements at a given index across multiple arrays
我有大约 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);
'cohort' 是一个对象数组。我想在每个队列对象中隔离 'bins' 数组。其中每一个都有 117 个元素长。对于每个 bins[i],我想从所有 bins 中获取 [i] 的平均值。我想基本上将 300 个 117 数组的数组变成一个 117 数组的数组。任何帮助将不胜感激!
关于如何在 JS 中计算数组的均值已经有答案:
您可以使用该答案中定义的函数,并将其映射到数组数组中。例如:
var result = cohort.map(cohortElement => cohortElement.bin).map(/*function declared in other Whosebug answer*/)
实现 ForEach 选项和数组 reduce 方法下面的预期用途
首先使用 array.ForEach 方法为 300 个数组创建循环
每个数组的内部循环,我正在使用 reduce 找到平均值
var sampleArr = [];// sample array for testing
var meanList = [];// final Mean list array
for (var i=0; i< 301; i++){
sampleArr[i] =[]
for (var j=0; j< 2; j++){
sampleArr[i].push({
x:i,
y:i+1
})
}
}
getMean = arr => {
arr.forEach(e => {
let sum = e.reduce(function(a, c) {
console.log(a, c);
return a.y + c.y;
});
meanList.push(sum / e.length);
});
};
getMean(sampleArr)
console.log(meanList);
我创建了长度为 300 的样本数组,每个样本数组有 2 个数组用于测试
D3 已经有一个名为 d3.mean 的方法,其中:
Returns the mean of the given array of numbers
因此,如果你想得到每个内部数组的平均值,你只需要这个(其中 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>
但是,您的数据结构现在不是很清楚:代码段上方的描述 ("I have about 300 arrays that each have 100 arrays of x and y values") 与代码段下方的描述 ("'cohort' 是一个对象数组。我想在每个队列对象中隔离 'bins' 数组。每个对象都是 117 个元素长。")!非常混乱...
因此,假设您有一个数组数组,并且在每个内部数组中您有两个值,[x, y]
,这就是您可以使用 d3.mean
表示两种方法的方式,一种表示x
值和 y
值的其他值:
var arrayOfMeans = [d3.mean(data.map(d => d[0])), d3.mean(data.map(d => d[1]))];
或者,如果您不喜欢文字:
var arrayOfMeans = d3.range(2).map(d => d3.mean(data.map(e => e[d])));
这是演示:
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)
<script src="https://d3js.org/d3.v5.min.js"></script>
我有大约 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);
'cohort' 是一个对象数组。我想在每个队列对象中隔离 'bins' 数组。其中每一个都有 117 个元素长。对于每个 bins[i],我想从所有 bins 中获取 [i] 的平均值。我想基本上将 300 个 117 数组的数组变成一个 117 数组的数组。任何帮助将不胜感激!
关于如何在 JS 中计算数组的均值已经有答案:
您可以使用该答案中定义的函数,并将其映射到数组数组中。例如:
var result = cohort.map(cohortElement => cohortElement.bin).map(/*function declared in other Whosebug answer*/)
实现 ForEach 选项和数组 reduce 方法下面的预期用途
首先使用 array.ForEach 方法为 300 个数组创建循环
每个数组的内部循环,我正在使用 reduce 找到平均值
var sampleArr = [];// sample array for testing
var meanList = [];// final Mean list array
for (var i=0; i< 301; i++){
sampleArr[i] =[]
for (var j=0; j< 2; j++){
sampleArr[i].push({
x:i,
y:i+1
})
}
}
getMean = arr => {
arr.forEach(e => {
let sum = e.reduce(function(a, c) {
console.log(a, c);
return a.y + c.y;
});
meanList.push(sum / e.length);
});
};
getMean(sampleArr)
console.log(meanList);
我创建了长度为 300 的样本数组,每个样本数组有 2 个数组用于测试
D3 已经有一个名为 d3.mean 的方法,其中:
Returns the mean of the given array of numbers
因此,如果你想得到每个内部数组的平均值,你只需要这个(其中 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>
但是,您的数据结构现在不是很清楚:代码段上方的描述 ("I have about 300 arrays that each have 100 arrays of x and y values") 与代码段下方的描述 ("'cohort' 是一个对象数组。我想在每个队列对象中隔离 'bins' 数组。每个对象都是 117 个元素长。")!非常混乱...
因此,假设您有一个数组数组,并且在每个内部数组中您有两个值,[x, y]
,这就是您可以使用 d3.mean
表示两种方法的方式,一种表示x
值和 y
值的其他值:
var arrayOfMeans = [d3.mean(data.map(d => d[0])), d3.mean(data.map(d => d[1]))];
或者,如果您不喜欢文字:
var arrayOfMeans = d3.range(2).map(d => d3.mean(data.map(e => e[d])));
这是演示:
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)
<script src="https://d3js.org/d3.v5.min.js"></script>