![](https://secure.gravatar.com/avatar/e8f58cfb2118c6b707b54110af22d43b.jpg?s=120&d=mm&r=g)
Hello, m -= diag(m) subtracts diag(m) from each row of m for me, if m is a numpy array, so your method could be far worse than wasteful. There may be an easier way to implement, but at its root it will be similar to the simple for loop: for i in range(len(new_diagonal)): m[i][i] = new_diagonal[i] assuming that new_diagonal is already a 1D array. If not, try: new_diagonal = diag(new_diagonal) first then run. If your dimensions are (very) large, you may have increased performance with for i in xrange(len(new_diagonal)): Hope this is helpful, Mclean On Wed, 30 Jan 2008, Carlos Scheidegger wrote:
Say I have a matrix m whose diagonal values I want to replace with the contents of vector new_diagonal. Right now, I'm using
m -= diag(m) m += diag(new_diagonal)
but that seems pretty wasteful (especially if diag() creates new arrays, which I suspect it does). Is there a standard (or any efficient) way to assign the diagonal values directly without an explicit for loop? Googling for "site:www.scipy.org assign diagonal" only returned results for sparse matrices, which is not the case here - these are plain numpy arrays.
Thanks in advance, -carlos _______________________________________________ SciPy-user mailing list SciPy-user@scipy.org http://projects.scipy.org/mailman/listinfo/scipy-user