It looks like the definition of the diagonal changed somewhere between Numeric 24.0 and numpy: In Numeric:
x = Numeric.arange(2*4*4) x = Numeric.reshape(x, (2, 4, 4)) x array([[[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11], [12, 13, 14, 15]], [[16, 17, 18, 19], [20, 21, 22, 23], [24, 25, 26, 27], [28, 29, 30, 31]]]) Numeric.diagonal(x) array([[ 0, 5, 10, 15], [16, 21, 26, 31]])
But in numpy:
import numpy as Numeric x = Numeric.arange(2*4*4) x = Numeric.reshape(x, (2, 4, 4)) Numeric.diagonal(x) array([[ 0, 20], [ 1, 21], [ 2, 22], [ 3, 23]])
The old logic seems to be clear: x is a pair of matrices and diagonal returns a pair of diagonals, but the new logic seems unclear: the disagonal returns the first rows of the two matrices transposed. Does anyone know when this change was introduced and why?