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;
}