2015-02-24 48 views
0

我试着编写这段代码来测试我的想法,以了解如何计算散列映射的相似指数的平均值。
即,如果第一个数组的第一个值为2,并且第二个数组的第一个值为4,并且第三个数组的第一个值为3,那么对于散列图中包含的每个数组,第一个值为3, (4 + 3 + 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]; 
    } 

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

+1

您的代码有这么多缺陷。 'AVERAGED_WEIGHTS [key - 1] + = value [key - 1]; '以及在你正在分配钥匙,但没有存储在任何地方的情况。为什么你使用最后一个循环? – Prashant 2015-02-24 05:47:33

+0

dig [this one](http://stackoverflow.com/questions/28688007/take-the-average-of-each-index-in-a-double-hash-map-and-assign-it-to-an - 输出)这是我想要做的更完整的描述 – 2015-02-24 05:50:12

+0

@Prashant你同意Daniel的答案是正确的吗? – 2015-02-24 05:58:49

回答

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(); 
} 
+0

会适用于[此应用程序](http://stackoverflow.com/questions/28688007/take-the-average-of-each-index-in-a-double-hash-map-and-assign-it -to-的输出)? – 2015-02-24 05:56:36

+0

嗨,丹尼尔。我想基于他的场景,最后,我们应该通过map keySet.size()来划分。 – zzyclark 2015-02-24 06:01:14

+0

哦,我的错字。你是对的。刚刚编辑答案 – DanielX2010 2015-02-24 06:01:50