# how to get the diagonal of a matrix?

 1 Is there something like ? sage: A = matrix(QQ,3,3,[3,-1,1,3,6,2,3,3,7]) sage: A.diagonal() [3,6,7] asked Aug 23 '10 Pedro Cruz 135 ● 4 ● 7 ● 16 http://www.mat.ua.pt/jped... I created http://trac.sagemath.org/sage_trac/ticket/9796 to track adding this. Jason Grout (Aug 24 '10) Rob Beezer posted a patch there relatively recently, if anyone wants to review it. kcrisman (Jan 13 '11)

 2 You could also do something like:  sage: A=matrix(QQ,3,3,[3,-1,1,3,6,2,3,3,7]) sage: A.numpy().diagonal() array([3, 6, 7])  posted Aug 24 '10 Jason Grout 3305 ● 7 ● 28 ● 74
 1 I don't believe so. sage: [A[z][z] for z in range(A.nrows())] [3, 6, 7] could work. But I don't know that this is what you are looking for. Would you find this useful as an attribute? What output would be expected for a non-square matrix? posted Aug 23 '10 kcrisman 7427 ● 17 ● 76 ● 166 Note that you should use A[z,z] instead of A[z][z] to get the entry as it is quite a bit more efficient. A[z] needs to construct and return a whole row of the matrix before you can get the z'th entry of that row. Mike Hansen (Aug 23 '10) Thanks, I wasn't sure which syntax was better to use. kcrisman (Aug 24 '10) kcrisman -- I definitely think somebody should add this as a function, given that it is in numpy. If you do, add a link to a trac ticket here. William Stein (Aug 24 '10) It's already http://trac.sagemath.org/sage_trac/ticket/9796Mike Hansen (Aug 24 '10)
 1 Depending on whether you want to do numerics or exact linear algebra, you can use Numpy/Scipy's matrix object. (Numpy and Scipy are included in Sage.) For example: sage: import numpy as np sage: A = np.matrix([[3,-1,1],[3,6,2],[3,3,7]]) sage: A.diagonal() matrix([[3, 6, 7]])  The diagonal() method also supports rectangular matrices. It does the obvious, which is to continue down the diagonal until a "side" of the matrix is hit. For example, if I add a row to the above matrix I get the following output: sage: B = np.matrix([[3,-1,1],[3,6,2],[3,3,7],[0,0,0]]) sage: B.diagonal() matrix([[3, 6, 7]])  Or if I add a column at the end: sage: C = np.matrix([[3,-1,1,0],[3,6,2,0],[3,3,7,0]]) sage: C.diagonal() matrix([[3, 6, 7]])  But again, Numpy/Scipy's specialty is in floating point arithmetic. (I.e. numerics) Thankfully, there is a decent amount of compatibility between Numpy's numpy.matrix object and Sage's sage.matrix object. posted Aug 23 '10 cswiercz 829 ● 5 ● 17 ● 33 http://www.cswiercz.info/

[hide preview]