繁体   English   中英

矩阵平均值的有效数据结构

[英]Efficient Data Structure for the average of a matrix

我有一个数组列表。

它的价值是

arrlist[0] = 1 2 3
arrlist[1] = 4 5 6
arrlist[2] = 7 8 9
arrlist[3] = 10 11 12
arrlist[4] = 13 14 15

我想要的平均值是: 1,4,7,10,13 然后是2,5,8,11,14的平均值

并且结果arraylist应该只包含一个字符串,例如7,8,9(所有5列的平均值)

编号将是随机的。

这将是最有效的方式。 ??

我想到了一种将每个元素存储在新数组列表中的方法,但是循环会很大。

任何人都可以建议一种有效的方法。

我想的方式是:只是一个伪代码

arraylist newarrylist = new arraylist ();
for(int j=0;j<arrlist.size*arrlist[0].size;j++) // as each arrlist would have same elements
{    
newarrylist[j] =  arrlist(j).sunstring(j); // means will get the substring, first column, then second..
}

就像人们所说的那样,过早的优化是万恶之源。 除非您的数组当然很大(例如10000行* 10000列)。

无论如何,在计算平均值时没有太多选择!

我要做的是这样的事情(将其更多地作为伪代码,我尚未对其进行调试;此外,请确保没有整数溢出):

int[] columnAverages = new int[width];

for (int row = 0; row < height; row++)
   for (int column = 0; column < width; column++)
   {
      int value = (parse the next integer here);
      columnAverages[column] += value;
   }

for (int column = 0; column < width; column++)
   columnAverages[column] /= height;

希望这可以帮助

这里使用的数据结构是整数数组的数组列表(集合)。

解决了您的问题:

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

/**
 * 
 * @author Mohamed Ennahdi El Idrissi
 * 25 February 2014.
 *
 */
public class User3345483 {

/*
 * arrlist[0] = 1   2    3
 * arrlist[1] = 4   5    6
 * arrlist[2] = 7   8    9
 * arrlist[3] = 10  11   12
 * arrlist[4] = 13  14   15
 */
static List<Integer[]> arrliste = new ArrayList<Integer[]>();
public static void main(String[] args) {

    /*
    arr = new Integer[]{1, 2, 3};
    arrliste.add(arr);
    arr = new Integer[]{4, 5, 6};
    arrliste.add(arr);
    arr = new Integer[]{7, 8, 9};
    arrliste.add(arr);
    arr = new Integer[]{10, 11, 12};
    arrliste.add(arr);
    arr = new Integer[]{13, 14, 15};
    arrliste.add(arr);
    */

    initArray();
    initArray();
    initArray();
    initArray();
    initArray();

    displayArray();

    Integer[]   arr;
    arr = new Integer[3];
    int avg;
    for (int i = 0; i < arr.length; i++) {
        avg = 0;
        for (int j = 0; j < arrliste.size(); j++) {
            avg += ((Integer[]) arrliste.get(j))[i];
        }
        avg = avg/arrliste.size();
        System.out.println("Average Column " + i + ": " +avg);
        arr[i] = avg;
    }
}

static void initArray() {
    Integer[] arr = new Integer[3];
    for (int i = 0; i < arr.length; i++) {
        arr[i] = new Random().nextInt(100);
    }
    arrliste.add(arr);
}

static void displayArray() {
    System.out.println("Values of the Populated Array:");
    for (Integer[] integer : arrliste) {
        for (int i = 0; i < integer.length; i++) {
            System.out.print(integer[i] + "\t");
        }
        System.out.println();
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM