注册 登录
编程论坛 JAVA论坛

java 编写的计算Pearson相关系数的程序出现了NaN值,要怎样处理呢?求大神帮忙

Graceli1 发布于 2016-04-01 12:09, 2997 次点击
public static double Pearson1(double sa[][]){
        
        int row=sa.length;                            //sa[][]常为10列
        int col = sa[0].length;
        double av[] = new double [col];
        double wei_pearson[]=new double[col];
        
        //求每个列向量之间的平均值
        for(int j=0;j<col;j++){
            double avj = 0;             //存放每个向量的各元素的平均值
            double sumrate = 0;         //存放每个向量的各元素的和
        
            for(int i=0;i<row;i++){
                sumrate += sa[i][j];
            }
            avj = sumrate/row;
            av[j] = avj;
        }
        
        //System.out.println("pearson:");   
        double psum=0;                            //存放所有相关系数的平均数作为该列最终的相关系数
        for(int i=0;i<col;i++){
             double sum1=0;   
             double sum2=0;   
             double sum3=0;   
             double sum33=0;   
             double sumji=0;   
             for(int j=0;j<row;j++){   
                 double aimcha;   
                 double usercha;
                 aimcha=sa[j][0]-av[0];
                 usercha=sa[j][i]-av[i];
                 sumji+=aimcha*usercha;
                 sum1+=aimcha*aimcha;   
                 sum2+=usercha*usercha;
             }
             sum33=(double)(sum1*sum2);   
             sum3=Math.sqrt(sum33);
             double wei=sumji/sum3;   
             wei_pearson[i]=wei;   
           //  System.out.println("第"+(i+1)+": "+wei_pearson[i]);                          //分别打印目的列向量与窗口内其他向量的相关系数         
             psum = psum + wei_pearson[i];
        }
        psum = psum/col;
        //System.out.println(psum);   
        return psum;
    }
以上是计算相关系数的程序,简单测试时不会出现错误,但是在实验应用中会出现好多NaN值,这该如何处理呢??急求大神帮忙,谢谢!!!
0 回复
1