2次元のヒストグラム
今、ある値のペアのデータがあるとする。{{x1,y1},{x2,y2},...,{xn,yn}}。
これを、xについて、ある刻みで、yについてもある刻みで、a(j)<=xi
public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ int N=100; double[][] data=new double[3][N]; for(int i=0;i<N;i++){ data[0][i]=Math.random()*5; data[1][i]=Math.random()*0.4; data[2][i]=Math.random(); } int[] kizami={10,5}; double[] min={0,0}; double[] max={5,0.5}; double[][] hist=D2histogram(data,kizami,min,max); for(int i=0;i<hist.length;i++){ for(int j=0;j<hist[i].length;j++){ System.out.print(hist[i][j]+"\t"); } System.out.println(); } System.out.println(); double[][] cumul=D2cumulative(hist); for(int i=0;i<cumul.length;i++){ for(int j=0;j<cumul[i].length;j++){ System.out.print(cumul[i][j]+"\t"); } System.out.println(); } } public static double[][] D2histogram(double[][] d,int[] kizami,double[] min,double[]max){ double[][] ret = new double[kizami[0]][kizami[1]]; for(int i=0;i<d[0].length;i++){ int v1=(int)((d[0][i]-min[0])/(max[0]-min[0])*(double)kizami[0]); int v2=(int)((d[1][i]-min[1])/(max[1]-min[1])*(double)kizami[1]); ret[v1][v2]+=d[2][i]; } return ret; } public static double[][] D2cumulative(double[][] d){ double[][] ret = new double[d.length][d[0].length]; ret[0][0]=d[0][0]; for(int i=1;i<d.length;i++){ ret[i][0]=ret[i-1][0]+d[i][0]; } for(int i=1;i<d[0].length;i++){ ret[0][i]=ret[0][i-1]+d[0][i]; } for(int i=1;i<d.length;i++){ for(int j=1;j<d[i].length;j++){ ret[i][j]=ret[i-1][j]+ret[i][j-1]-ret[i-1][j-1]+d[i][j]; } } return ret; }