[Numpy-discussion] fixing diag() for matrices

Robert Kern robert.kern at gmail.com
Tue Jul 25 13:37:00 CDT 2006

Sven Schreiber wrote:
> That would be fine with me. However, I'd like to point out that after
> some bug-squashing currently all numpy functions deal with
> numpy-matrices correctly, afaik. The current behavior of numpy.diag
> could be viewed as a violation of that principle. (Because if x has
> shape (n,1), diag(x) returns only the first entry, which is pretty
> stupid for a diag-function operating on a vector.)

I don't think so. It's operating exactly as it is documented to. It doesn't do 
what you want, but it's not supposed to read your mind and guess that you are 
treating (n,1) and (1,n) arrays as linear algebraic vectors and that you want to 
form a diagonal matrix from that vector. It handles matrix objects just fine; it 
does not obey a particular convention that you want to use, though. That's 
neither broken nor a violation of the principle that most numpy functions should 
accept matrix objects; it's just not what you want.

I don't want to introduce a backwards-compatibility-breaking special case to the 
function. "Special cases aren't special enough to break the rules." Different 
functionality should go into a different function.

Robert Kern

"I have come to believe that the whole world is an enigma, a harmless enigma
  that is made terrible by our own mad attempt to interpret it as though it had
  an underlying truth."
   -- Umberto Eco

More information about the Numpy-discussion mailing list