Mentions légales du service

Skip to content
Snippets Groups Projects
Commit 6951a9cc authored by hhakim's avatar hhakim
Browse files

Implement MatButterfly::nonzero_indices.

parent 38c05d7f
No related merge requests found
...@@ -87,7 +87,7 @@ namespace Faust ...@@ -87,7 +87,7 @@ namespace Faust
MatGeneric<FPP,Cpu>* get_rows(faust_unsigned_int row_id_start, faust_unsigned_int num_rows) const; MatGeneric<FPP,Cpu>* get_rows(faust_unsigned_int row_id_start, faust_unsigned_int num_rows) const;
MatGeneric<FPP,Cpu>* get_cols(const faust_unsigned_int* col_ids, faust_unsigned_int num_cols) const; MatGeneric<FPP,Cpu>* get_cols(const faust_unsigned_int* col_ids, faust_unsigned_int num_cols) const;
MatGeneric<FPP,Cpu>* get_rows(const faust_unsigned_int* row_ids, faust_unsigned_int num_rows) const; MatGeneric<FPP,Cpu>* get_rows(const faust_unsigned_int* row_ids, faust_unsigned_int num_rows) const;
std::list<std::pair<int,int>> nonzeros_indices() const; std::list<std::pair<int,int>> nonzeros_indices(const double& tol=0) const;
void setZeros(); void setZeros();
bool containsNaN()const; bool containsNaN()const;
const FPP& operator()(faust_unsigned_int i, faust_unsigned_int j)const; const FPP& operator()(faust_unsigned_int i, faust_unsigned_int j)const;
......
...@@ -345,9 +345,25 @@ namespace Faust ...@@ -345,9 +345,25 @@ namespace Faust
} }
template<typename FPP> template<typename FPP>
std::list<std::pair<int,int>> MatButterfly<FPP, Cpu>::nonzeros_indices() const std::list<std::pair<int,int>> MatButterfly<FPP, Cpu>::nonzeros_indices(const double& tol/*=0*/) const
{ {
//TODO auto s = this->getNbRow();
auto k = s >> (level + 1); // D2 diagonal offset
std::list<std::pair<int,int>> indices;
const FPP *d1_ptr, *d2_ptr;
d1_ptr = D1.diagonal().data();
d2_ptr = D2.diagonal().data();
for(int i=0; i < s; i++)
{
if(std::abs(d1_ptr[i]) > tol)
indices.push_back(std::make_pair(i, i)); // main diag coeff
if(std::abs(d2_ptr[i]) > tol)
if((i / k) & 1)
indices.push_back(std::make_pair(i, i - k)); // below diag coeff
else
indices.push_back(std::make_pair(i, i + k)); // above diag coeff
}
return indices;
} }
template<typename FPP> template<typename FPP>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment