Re: Creating a symmetric matrix
- To: mathgroup at smc.vnet.net
- Subject: [mg46856] Re: [mg46853] Creating a symmetric matrix
- From: Oleksandr Pavlyk <pavlyk at phys.psu.edu>
- Date: Fri, 12 Mar 2004 02:02:41 -0500 (EST)
- Organization: Penn State University; Department of Physics
- References: <200403110850.DAA13986@smc.vnet.net>
- Reply-to: pavlyk at phys.psu.edu
- Sender: owner-wri-mathgroup at wolfram.com
Hi Mark, I this this one should be pretty efficient In[1]:= Symmetrize[mat_] := mat + Transpose[mat] - DiagonalMatrix[Flatten[MapIndexed[#1[[#2]] & , mat]]]; given upper(or lower) triangular matrix mat at the input, it adds its transposed and subtracts the diagonal. I ran some tests, the time it takes is quadratic in the size of mat, yet the time is considerable smaller that it took to create random upper-triangular matrix. Here is the code used In[2]:= getUpperTriangular[dim_] := Table[If[n > m, 0, Random[Integer, {1,100}] ], {n, 1, dim}, {m, 1, dim}]; In[3]:= SetAttributes[getTiming, {HoldAll, SequenceHold}] getTiming[expr_] := Timing[expr][[1]] /. {Second -> 1} In[4]:= symt = {}; creat = {}; Do[creat = Append[creat, {dim, getTiming[mat = getUpperTriangular[dim]]}]; symt = Append[symt, {dim, getTiming[res = Symmetrize[mat]]}]; , {dim, 10, 2000, 100}] In[5]:= ListPlot[symt] (* Graph of time it takes to symmetrize *) In[6]:= ListPlot[symt] (* Graph of time it takes to create the u-t. matrix *) It takes 3.4 seconds to symmetrize a random matrix of 3000 x 3000 integers on my P4 2.0GHz w/ 768MB. And it took almost 18 seconds to create such a matrix. Best, Sasha Mark Coleman wrote: > Greetings, > > How can I efficiently build a symmetric matrix from an upper triangular > one, i.e., extract the upper triangular elements and insert them into > the lower triangle in such a way as to make the resulting square matrix > symmetric? > > Thanks, > > Mark > -- Office: 6H Osmond Web: http://www.pavlyk.com ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ No trees were destroyed to send this mail, but a lot of electrons were terribly disturbed.
- References:
- Creating a symmetric matrix
- From: Mark Coleman <mark@markscoleman.com>
- Creating a symmetric matrix