If the rest of the matrix is already zeros and memory wasn't a problem, you could just use
A_sym = A + A.T - diag(diag(A)) If memory was an issue, I'd suggest weave.inline (if that's a viable option) or pyrex to do the loop, which would be about as fast as you could get. --Hoyt On Wed, Mar 26, 2008 at 7:22 AM, Alexandre Fayolle <[EMAIL PROTECTED]> wrote: > On Wed, Mar 26, 2008 at 09:48:02AM -0400, Pierre GM wrote: > > All, > > What's the quickest way to create a diagonal matrix ? I already have the > > elements above the main diagonal. Of course, I could use loops: > > >>>m=5 > > >>>z = numpy.arange(m*m).reshape(m,m) > > >>>for k in range(m): > > >>> for j in range(k+1,m): > > >>> z[j,k] = z[k,j] > > But I was looking for something more efficient. > > From your code, you certainly meant "symetric" and not diagonal. > > Maybe you can speed up things a bit by assigning slices: > > >>> for k in range(m): > ... z[k:, k] = z[k, k:] > > > > -- > Alexandre Fayolle LOGILAB, Paris (France) > Formations Python, Zope, Plone, Debian: http://www.logilab.fr/formations > Développement logiciel sur mesure: http://www.logilab.fr/services > Informatique scientifique: http://www.logilab.fr/science > > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v1.4.6 (GNU/Linux) > > iQEVAwUBR+pcDl6T+PKoJ87eAQI1zAf/W7wnB1a6sa4FuHDPTDjU61ZpvDgS41r7 > B7EuSDncTluf3Y5ynQ8NroAihX0DvV4F5LTDcbFJbmqnQx8JApVoeQF3wnTnpf24 > pUQ5oSB+w0+RtzU0Zu/TBkOh3hM8iPYyB2M7jq9/qakVxEsrlOiTH+j05ysJD9FG > GezArMoQu5ycJ26Ir9P7jR0acH/WBA84U524aiDbenLMmpFIZX7mElU47z/Ue5m7 > xKTT/lu3BWQAJPoQTiHG7nRLDaAqxKVO0WLXPuUJ7HyCc4qjURhXZMmJQ2FP2ajt > H9AQQhNkO7eUAPmMLhK0x262bYIdq699UmjV7YOVmSvCrBM76okqew== > =ha+1 > -----END PGP SIGNATURE----- > > _______________________________________________ > Numpy-discussion mailing list > Numpy-discussion@scipy.org > http://projects.scipy.org/mailman/listinfo/numpy-discussion > > _______________________________________________ Numpy-discussion mailing list Numpy-discussion@scipy.org http://projects.scipy.org/mailman/listinfo/numpy-discussion