diag

Purpose

Creates a column vector from the diagonal of a matrix.

Format

y = diag(x)
Parameters:

x (NxK matrix or LxNxK array) – Data matrix.

Returns:

y (min(N,K)x1 vector or L-dimensional array) – The diagonal of the x matrix where the last two dimensions are min(N,K)x1.

Examples

Get the diagonal from a matrix.

// Set rng seed for reproducibility
rndseed 458716;

// Create random matrix
x = rndu(3, 3);

// Take diagonal of y
y = diag(x);

// Print results
print "x = " x;
print "y = " y;

After the above code,

x =
0.96748215 0.31791692 0.46520760
0.04558545 0.78613263 0.20528802
0.73825699 0.30528745 0.73350290

y =
0.96748215
0.78613263
0.73350290

Using diag() function for a 2x4x4 dimensional array.

// Create random matrix
x = rndn(32, 1);

// Reshape the 32x1 vector into a 2x4x4 dimensional array
x = areshape(x, 2|4|4);
d = diag(x);

Now x is equal to:

Plane [1,.,.]

      1.0305361       -1.5803315       0.31002373      -0.99371013
     -1.3967459       0.79842593       0.57613617        1.0063836
    -0.22636263       0.89422800      0.089845674       0.56126503
      1.1532259        1.1146830       0.60477874     -0.035759847

 Plane [2,.,.]

      1.1957213      -0.57905631      -0.75646146     -0.068990606
      1.5065762       0.43443580     -0.033498917       -1.5231533
      1.1028613       -2.0432636       -1.0517457      0.021677957
     -1.0861596      -0.76471535      -0.60429045       0.49674694

and d is a 2x4x1 array containing the diagonals from x above.

Plane [1,.,.]

      1.0305361
     0.79842593
    0.089845674
   -0.035759847

Plane [2,.,.]

      1.1957213
     0.43443580
     -1.0517457
     0.49674694

Remarks

If x is a matrix, it need not be square. Otherwise, if x is an array, the last two dimensions need not be equal.

If x is an array, the result will be an array containing the diagonals of each 2-dimensional array described by the two trailing dimensions of x. For example, for a 10x4x4 array, the result will be a 10x4x1 array containing the diagonals of each of the 10 4x4 arrays contained in x.

diagrv() reverses the procedure and puts a vector into the diagonal of a matrix.

See also

Functions diagrv()