Create / manipulate diagonal matrices in Chapel -


i have square matrix a

use linearalgebra;     proc main() {   var = matrix(        [4.0, 0.8, 1.1, 0.0, 2.0]       ,[0.8, 9.0, 1.3, 1.0, 0.0]       ,[1.1, 1.3, 1.0, 0.5, 1.7]       ,[0.0, 1.0, 0.5, 4.0, 1.5]       ,[2.0, 0.0, 1.7, 1.5, 16.0]       ); } 

and want construct diagonal matrix d = 1/sqrt(a_ii). seems have have extract diagonal, operate on each element. expect matrix large , sparse, if changes answer.

here's solution using linearalgebra module in 1.16 (pre-release):

use linearalgebra;  var = matrix(                [4.0, 0.8, 1.1, 0.0, 2.0],                [0.8, 9.0, 1.3, 1.0, 0.0],                [1.1, 1.3, 1.0, 0.5, 1.7],                [0.0, 1.0, 0.5, 4.0, 1.5],                [2.0, 0.0, 1.7, 1.5, 16.0]               );  var s = sqrt(1.0/diag(a));  // type required because of promotion-flatting // see linear algebra documentation more details.. var b: a.type = diag(s);  writeln(b); 

Comments

Popular posts from this blog

What is happening when Matlab is starting a "parallel pool"? -

angular - DownloadURL return null in below code -

php - Cannot override Laravel Spark authentication with own implementation -