Java 计算散列映射标记的平均值

Java 计算散列映射标记的平均值,java,hashmap,Java,Hashmap,我试着写这段代码来验证我的想法,即如何计算散列图中类似索引的平均值。 i、 e.对于hashmap中包含的每个数组,如果第一个数组的第一个值是2,第二个数组的第一个值是4,第三个数组的第一个值是3,我想将(4+3+2/3)=3的值分配给第一个索引的最终双[]数组,对于所有指数2到n,依此类推 int Size = 3; double[] AVERAGED_WEIGHTS = new double[Size]; //store weights to be average

我试着写这段代码来验证我的想法,即如何计算散列图中类似索引的平均值。
i、 e.对于hashmap中包含的每个数组,如果第一个数组的第一个值是
2
,第二个数组的第一个值是
4
,第三个数组的第一个值是
3
,我想将(4+3+2/3)=
3
的值分配给第一个索引的最终双[]数组,对于所有指数2到n,依此类推

    int Size = 3;

    double[] AVERAGED_WEIGHTS = new double[Size];

    //store weights to be averaged. 
    Map<Integer,double[]> cached_weights = new HashMap<Integer,double[]>();

    double[] weights = new double[Size];

   int iteration = 0;
   do 
   {
       weights[iteration] = Math.floor(Math.random() * 10000) / 10000;

       iteration++;

       //store weights for averaging
       cached_weights.put( iteration , weights );  
    } 
    while (iteration < Size);

    //calc averages
    for (Entry<Integer, double[]> entry : cached_weights.entrySet()) 
    {
        int key = entry.getKey();
        double[] value = entry.getValue();
        AVERAGED_WEIGHTS[ key - 1 ] +=  value[ key - 1 ]; 

        if (key == iteration) 
        {
            AVERAGED_WEIGHTS[ key - 1 ] /= key;
        }
    }
    for(int i = 0; i < weights.length; i++)
    {
       weights[i] = AVERAGED_WEIGHTS[i];
    }
int Size=3;
double[]平均_权重=新的double[大小];
//存储要平均的重量。
Map cached_weights=new HashMap();
double[]权重=新的double[大小];
int迭代=0;
做
{
权重[迭代]=数学地板(数学随机()*10000)/10000;
迭代++;
//存储用于平均的权重
缓存的_weights.put(迭代,权重);
} 
而(迭代<大小);
//计算平均数
for(条目:缓存的\u weights.entrySet())
{
int key=entry.getKey();
double[]value=entry.getValue();
平均_权重[key-1]+=值[key-1];
if(key==迭代)
{
平均_权重[key-1]/=key;
}
}
对于(int i=0;i

这模仿了原始程序的结构,其中权重通过do while循环填充。但此代码已被破坏,无法成功执行上述操作。我一直在网上搜索,并尝试不同的方法来修复它,但我一直无法解决它。也许有人能发现我的错误逻辑

也许我误解了您的意思,但您没有计算平均值,因为对于地图中的每个数组,您没有考虑其所有位置。你用的是钥匙,这完全没有意义。无论如何,你的代码很混乱。你需要做的只是一个循环在另一个循环中。一个遍历数组,另一个遍历每个数组的元素。计算平均值的方法如下(以说教的方式):

//计算平均值
double[]总和=新的double[size];
双[]平均值=新的双[尺寸];
for(条目:cachedWeights.entrySet()){
double[]value=entry.getValue();
对于(int pos=0;pos
也许我误解了您的意思,但您没有计算平均值,因为对于地图中的每个数组,您没有考虑其所有位置。你用的是钥匙,这完全没有意义。无论如何,你的代码很混乱。你需要做的只是一个循环在另一个循环中。一个遍历数组,另一个遍历每个数组的元素。计算平均值的方法如下(以说教的方式):

//计算平均值
double[]总和=新的double[size];
双[]平均值=新的双[尺寸];
for(条目:cachedWeights.entrySet()){
double[]value=entry.getValue();
对于(int pos=0;pos
您的代码有很多缺陷<代码>平均_权重[key-1]+=值[key-1]以及在您使用密钥进行偏差但不存储在任何位置的情况下。你为什么用最后一个循环?这是对我想做的更完整的描述do@Prashant你同意Daniel的答案是正确的吗?你想找到所有数组中所有第一个元素的平均值??是的,并将其保存到新数组中的第一个元素,然后第二个元素相同,第三个元素相同,依此类推,你知道吗?你的代码有很多缺陷<代码>平均_权重[key-1]+=值[key-1]以及在您使用密钥进行偏差但不存储在任何位置的情况下。你为什么用最后一个循环?这是对我想做的更完整的描述do@Prashant你同意Daniel的答案是正确的吗?你想找到所有数组中所有第一个元素的平均值??是的,并将其保存到新数组中的第一个元素,然后第二个元素相同,第三个元素相同,依此类推,你知道吗?这适用于吗?嗨,丹尼尔。我认为根据他的场景,最后,我们应该除以map keySet.size()。为什么除以keySet.size()?我首先对每个位置的所有元素求和。比如你例子中的4+3+2。然后,在最后,你必须除以你求和的数组数(在你的例子中是3),我认为这是解决问题的正确方法。起初我对你的代码感到困惑。这适用于吗?嗨,丹尼尔。我认为根据他的场景,最后,我们应该除以map keySet.size()。为什么除以keySet.size()?我首先对每个位置的所有元素求和。比如你例子中的4+3+2。然后,在最后,你必须除以你求和的数组数(在你的例子中是3),我认为这是解决问题的正确方法。起初我对你的代码感到困惑。
//compute averages
double[] sums = new double[size];
double[] averages = new double[size];

for (Entry<Integer, double[]> entry : cachedWeights.entrySet()) {
    double[] value = entry.getValue();
    for(int pos=0; pos < Math.min(size, value.length); pos++){
        sums[pos] +=  value[pos]; 
    }
}
for(int pos=0; pos < size; pos++){
    averages[pos] = sums[pos] / cachedWeights.size(); 
}