summaryrefslogtreecommitdiff
path: root/src/Gudhi_stat/include/gudhi/persistence_representations/kernel.h
blob: 5c226303cf43b06ef61fffd400afffb3bf1240fa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#pragma once
#include "persistence_intervals.h"
#include "read_files_names.h"

template <typename T>
class Persistence_kernel
{
public:
    Persistence_kernel(){}
    //Persistence_kernel( std::vector< Persistence_intervals<T> >& inter );
    //Persistence_kernel( const char* filename );
    Persistence_kernel(size_t number_of_intervals_):number_of_intervals(number_of_intervals_){}
	std::vector< std::vector<double> > compute_Gram_matrix();
	virtual double compute_scalar_product( size_t number_of_first_barcode , size_t number_of_second_barcode )=0;
	size_t& number(){return this->number_of_intervals;}
protected:
    //std::vector< Persistence_intervals<T> > intervals;
    size_t number_of_intervals;
};
/*
template <typename T>
Persistence_kernel<T>::Persistence_kernel( std::vector< Persistence_intervals<T> >& inter )
{
    this->intervals(inter);
}

template <typename T>
Persistence_kernel<T>::Persistence_kernel( const char* filename )
{
    std::vector<std::string> names = readFileNames( filename );
    for ( size_t file_no = 0 ; file_no != names.size() ; ++file_no )
    {
        cout << "Reading file : " << names[file_no] << endl;
        Persistence_intervals<double> interval( (char*)names[file_no].c_str() );
        this->intervals.push_back( interval );
    }
}
*/

template <typename T>
std::vector< std::vector<double> > Persistence_kernel<T>::compute_Gram_matrix()
{
    cerr << "compute_Gram_matrix \n";
    bool dbg = true;
    std::vector< std::vector<double> >  result( this->number_of_intervals );
    for ( size_t i = 0 ; i != this->number_of_intervals ; ++i )
    {
        result[i] = std::vector<double>( this->number_of_intervals );
    }
    for ( size_t i = 0 ; i != this->number_of_intervals ; ++i )
    {
        cerr << "Computing row number : " << i << endl;
        #pragma omp parallel for
        for ( size_t j = i ; j < this->number_of_intervals ; ++j )
        {
            cerr << j << " ";
            result[i][j] = result [j][i] = this->compute_scalar_product( i,j );
        }
    }
    return result;
}//compute_Gram_matrix

void pint_Gram_matrix_to_file( std::vector< std::vector<double> >& matrix , char* filename )
{
    ofstream out;
    out.open(filename);
    for ( size_t i = 0 ; i != matrix.size() ; ++i )
    {
        for ( size_t j = 0 ; j != matrix[i].size() ; ++j )
        {
            out << matrix[i][j] << " ";
        }
        out << std::endl;
    }
    out.close();
}