Sono confuso su come funziona boost :: compressed_matrix. Supponiamo Dichiaro il compressed_matrix simili:boost basi di base compresse
boost::numeric::ublas::compressed_matrix<double> T(1000, 1000, 3*1000);
Questo alloca spazio per 3 * 1000 elementi in una matrice 1000x1000. Ora come faccio a dargli le posizioni che sono gli elementi diversi da zero? Quando e come vengono impostati gli elementi diversi da zero? È ogni volta che assegno un elemento nella matrice, ad es. B (4,4) = 4, contrassegna quell'elemento come non-zero?
Sarei davvero grato se potessi aiutarmi a imparare questo utilizzando un esempio se possibile. Qualche visione dell'implementazione interna sarebbe grandiosa. Voglio assicurarmi che non scriva programmi che non sono ottimali per il lavoro di congettura.
grazie!
c'è qualche vantaggio nel specificare il terzo argomento del costruttore - no degli elementi diversi da zero? Cosa succede se non lo specifichi? – user236215
Se inizi con 'unbounded_array' che è troppo corto per contenere tutti i tuoi non-zero, crescerà automaticamente se necessario, causando allocazioni di memoria e molte copie che si verificano ogni volta che un elemento diverso da zero viene scritto nella matrice che supera la capacità. Beh, in pratica, cresce in blocchi, come 'std :: vector' fa su' push_back', quindi non lo vedremo su ogni scrittura: esperimento con l'esempio precedente: crea la mia matrice compressa (3, 3), e aggiungi non zero a quattro elementi diversi. – Cubbi