2011-09-22 2 views
5

Come posso inizializzare uno SparseVector in Eigen? Il seguente codice:Come inizializzare uno SparseVector in Eigen

#define EIGEN_YES_I_KNOW_SPARSE_MODULE_IS_NOT_STABLE_YET 
#include <Eigen/Sparse> 
using namespace Eigen; 
SparseVector<float> vec(3); 
main() 
{ 
    vec(0)=1.0; 
} 

mi dà il seguente errore

error: call of an object of a class type without appropriate operator() or conversion functions to pointer-to-function type vec(0)=1.0;

tra l'altro, vec [0] = 1.0 non funziona neanche.

+2

Non ho mai sentito parlare di Eigen ma ho dato una rapida occhiata alla documentazione ho notato 'coeffRef', hai provato anche' vec.coeffRef (0) = 1.0'? – HostileFork

+0

Grazie mille. Questo è davvero il modo di inserirsi in SparseVector. – Tarek

+0

Va bene, risponderò così allora ... – HostileFork

risposta

4

Guardando la documentazione che ho notato Scalar& coeffRef(Index i), e dice:

Restituisce un riferimento al valore del coefficiente al dato indice i. Questa operazione solleva una ricerca binaria log (rho * size). Se il coefficiente non esiste ancora, viene eseguita un'inserzione ordinata in un buffer sequenziale. (Questo inserimento può essere molto costoso se il numero di nonzeros sopra i è di grandi dimensioni.)

Così il seguente dovrebbe funzionare:

#define EIGEN_YES_I_KNOW_SPARSE_MODULE_IS_NOT_STABLE_YET 
#include <Eigen/Sparse> 
using namespace Eigen; 
SparseVector<float> vec(3); 
main() 
{ 
    vec.coeffRef(0)=1.0; 
} 

Non so perché l'hanno fatto in questo modo invece di utilizzare array di sovraccarico. Forse quando diventerà IS_STABLE lo faranno in un modo più tipico di C++?

+2

Penso che volessero rendere gli utenti consapevoli di un potenziale operativo. – eudoxos

+1

Sì, ma questa è solo sintassi errata. In genere non si _assegna_ al valore di ritorno di una chiamata di funzione. – bobobobo

+0

Sono d'accordo con bobobobo sul fatto che l'interfaccia corrente sia confusa. Ho trovato questo sito Web perché la sintassi evidente non ha funzionato. Questo è un segno che l'interfaccia è un po 'ottusa (per non parlare di verbose). – Joe