Lines Matching refs:pca
28 #include "pca.h"
39 PCA *pca;
43 pca= av_mallocz(sizeof(*pca));
44 if (!pca)
47 pca->n= n;
48 pca->z = av_malloc_array(n, sizeof(*pca->z));
49 pca->count=0;
50 pca->covariance= av_calloc(n*n, sizeof(double));
51 pca->mean= av_calloc(n, sizeof(double));
53 if (!pca->z || !pca->covariance || !pca->mean) {
54 ff_pca_free(pca);
58 return pca;
61 void ff_pca_free(PCA *pca){
62 av_freep(&pca->covariance);
63 av_freep(&pca->mean);
64 av_freep(&pca->z);
65 av_free(pca);
68 void ff_pca_add(PCA *pca, const double *v){
70 const int n= pca->n;
73 pca->mean[i] += v[i];
75 pca->covariance[j + i*n] += v[i]*v[j];
77 pca->count++;
80 int ff_pca(PCA *pca, double *eigenvector, double *eigenvalue){
83 const int n= pca->n;
84 double *z = pca->z;
89 pca->mean[j] /= pca->count;
92 pca->covariance[j + i*n] /= pca->count;
93 pca->covariance[j + i*n] -= pca->mean[i] * pca->mean[j];
94 pca->covariance[i + j*n] = pca->covariance[j + i*n];
96 eigenvalue[j]= pca->covariance[j + j*n];
105 sum += fabs(pca->covariance[j + i*n]);
129 double covar= pca->covariance[j + i*n];
137 pca->covariance[j + i*n]=0.0;
159 ROTATE(pca->covariance,FFMIN(k,i),FFMAX(k,i),FFMIN(k,j),FFMAX(k,j))
163 pca->covariance[j + i*n]=0.0;