计算哈希映射的指标的平均值

sma*_*ish 0 java hashmap

我尝试编写这段代码来测试我如何计算哈希映射的类似索引的平均值的想法.
即,如果第一个数组2的第一个值是,第二个数组 4的第一个值是第一个值,第三个数组的第一个值是3,我希望为(4 + 3 +)赋值,对于hashmap中包含的每个数组2/3)= 3到第一个索引的最后double []数组,依此类推所有索引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];
    }
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*010 5

也许我误解了你,但你没有计算平均值,因为对于地图中的每个数组,你没有考虑到它的所有位置.你正在使用密钥,这绝对没有意义.无论如何,你的代码非常混乱.你需要做的只是一个循环在另一个循环中.一个通过数组,另一个通过每个数组的元素.计算平均值的方法如下(以教学方式):

//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(); 
}
Run Code Online (Sandbox Code Playgroud)