天天看點

Android PCA降維處理

public double[][] PCA_transform(double[][] data,double[] pca_mean_,double[][] pca_components_,int MFCC_Len,int PCA_Len) {
    if(pca_mean_!=null) {
        double[][] tempData = data;
        for(int i=0;i<data.length;i++){
            for(int j=0;j<data[i].length;j++){
                tempData[i][j]=data[i][j]-pca_mean_[j];
            }
        }
        data=tempData;

    }

    double [][]b = new double[MFCC_Len][PCA_Len];
    for (int i = 0; i < MFCC_Len; i++) {
        b[i] = new double[PCA_Len];
    }
    for (int i = 0; i < PCA_Len; i++) {
        for (int j = 0; j < MFCC_Len; j++) {
            b[j][i] = pca_components_[i][j];
        }
    }

    return dot(data, b);
}
public double[][] dot(double[][] data, double[][] pca_components_,int MFCC_Len,int PCA_Len) {

    double[][] filter_banks = new double[data.length][PCA_Len];
    for (int i = 0; i < data.length; i++) {
        for (int j = 0; j < PCA_Len; j++) {
            for(int k=0;k<MFCC_Len;k++){
                filter_banks[i][j] += pca_components_[k][j] * data[i][k];
            }
        }
    }
    return filter_banks;

}