2013-07-31 7 views
5

Sto usando l'armadillo principalmente per matrici simmetriche e triangolari. Volevo essere efficiente in termini di memoria. Tuttavia, sembra che non ci sia altro modo che creare un nuovo tappeto e riempire con zeri (per triangolare) o con duplicati (per simmetrico) la parte inferiore/superiore della matrice.Armadillo C++: Esiste un modo specifico per creare una matrice triangolare o simmetrica efficiente

Esiste un modo più efficiente di utilizzare matrici triangolari/simmetriche utilizzando Armadillo?

Grazie, Antoine

risposta

3

Non v'è alcun sostegno specifico per matrici triangolari o a bande in Armadillo. Tuttavia, dal momento che il supporto della versione 3.4 per le matrici sparse è stato gradualmente aggiunto. A seconda delle funzioni di Armadillo necessarie e della sparsità della matrice, è possibile ottenere dall'uso di SpMat<type> che implementa lo compressed sparse column (CSC) format. Per ogni valore diverso da zero nella matrice, il formato CSC memorizza l'indice di riga insieme al valore in modo da non risparmiare molta memoria per una matrice triangolare. Una matrice diagonale a bande dovrebbe tuttavia consumare molta meno memoria.