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
Post a Comment