![](https://secure.gravatar.com/avatar/ab7e74f2443b81e5175638d72be65e07.jpg?s=120&d=mm&r=g)
31 Jan
2008
31 Jan
'08
12:37 a.m.
On 30/01/2008, Carlos Scheidegger <cscheid@sci.utah.edu> 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)
If m is n by n, how about this? m[range(n),range(n)]=new_diagonal Slightly less efficient than using strides as suggested elsewhere if the array is contiguous in memory, but it'll work no matter how m is laid out and it's clear. It also generalizes, of course. (Incidentally, if it seems like this should set all elements of m, this is what I would have thought too, but it's not how numpy works. For that use the N._ix function.) Anne