function diag
diag(x: array): matrix

Diagonal matrix creation and extraction of diagonals from a matrix.

For an input vector, creates a diagonal matrix. For a matrix input, extracts the k-th diagonal (0: main diagonal, k > 0: above main diagonal, k < 0: below main diagonal).

Examples

Create a diagonal matrix from a vector

import { assertEquals } from "jsr:@std/assert";

assertEquals(diag([5, 6, -3]), [[5, 0, 0], [0, 6, 0], [0, 0, -3]]);

Create a diagonal matrix with k = 1

import { assertEquals } from "jsr:@std/assert";

assertEquals(diag([5, 6, -3], 1), [[0, 5, 0, 0], [0, 0, 6, 0], [0, 0, 0, -3], [0, 0, 0, 0]]);

Create a diagonal matrix with k = -1

import { assertEquals } from "jsr:@std/assert";

assertEquals(diag([5, 6, -3], -1), [[0, 0, 0, 0], [5, 0, 0, 0], [0, 6, 0, 0], [0, 0, -3, 0]]);

Extract the main diagonal from a matrix

import { assertEquals } from "jsr:@std/assert";

assertEquals(diag([[5, 0, 0], [0, 6, 0], [0, 0, -3]]), [5, 6, -3]);

Extract the first superdiagonal from a matrix

import { assertEquals } from "jsr:@std/assert";

assertEquals(diag([[0, 5, 0, 0], [0, 0, 6, 0], [0, 0, 0, -3], [0, 0, 0, 0]], 1), [5, 6, -3]);

Extract the first subdiagonal from a matrix

import { assertEquals } from "jsr:@std/assert";

assertEquals(diag([[0, 0, 0, 0], [5, 0, 0, 0], [0, 6, 0, 0], [0, 0, -3, 0]], -1), [5, 6, -3]);

Extract a diagonal out of bounds (diagonal 2)

import { assertEquals } from "jsr:@std/assert";

assertEquals(diag([[5, 0, 0], [0, 6, 0], [0, 0, -3]], 2), [0]);

Parameters

Input array or matrix.

Return Type

Diagonal matrix or array of diagonal values.

Throws

If the input is neither a vector nor a matrix.

diag(x: matrix): array

Diagonal matrix creation and extraction of diagonals from a matrix.

For an input vector, creates a diagonal matrix. For a matrix input, extracts the k-th diagonal (0: main diagonal, k > 0: above main diagonal, k < 0: below main diagonal).

Examples

Create a diagonal matrix from a vector

import { assertEquals } from "jsr:@std/assert";

assertEquals(diag([5, 6, -3]), [[5, 0, 0], [0, 6, 0], [0, 0, -3]]);

Create a diagonal matrix with k = 1

import { assertEquals } from "jsr:@std/assert";

assertEquals(diag([5, 6, -3], 1), [[0, 5, 0, 0], [0, 0, 6, 0], [0, 0, 0, -3], [0, 0, 0, 0]]);

Create a diagonal matrix with k = -1

import { assertEquals } from "jsr:@std/assert";

assertEquals(diag([5, 6, -3], -1), [[0, 0, 0, 0], [5, 0, 0, 0], [0, 6, 0, 0], [0, 0, -3, 0]]);

Extract the main diagonal from a matrix

import { assertEquals } from "jsr:@std/assert";

assertEquals(diag([[5, 0, 0], [0, 6, 0], [0, 0, -3]]), [5, 6, -3]);

Extract the first superdiagonal from a matrix

import { assertEquals } from "jsr:@std/assert";

assertEquals(diag([[0, 5, 0, 0], [0, 0, 6, 0], [0, 0, 0, -3], [0, 0, 0, 0]], 1), [5, 6, -3]);

Extract the first subdiagonal from a matrix

import { assertEquals } from "jsr:@std/assert";

assertEquals(diag([[0, 0, 0, 0], [5, 0, 0, 0], [0, 6, 0, 0], [0, 0, -3, 0]], -1), [5, 6, -3]);

Extract a diagonal out of bounds (diagonal 2)

import { assertEquals } from "jsr:@std/assert";

assertEquals(diag([[5, 0, 0], [0, 6, 0], [0, 0, -3]], 2), [0]);

Parameters

Input array or matrix.

Return Type

Diagonal matrix or array of diagonal values.

Throws

If the input is neither a vector nor a matrix.

diag(
x: array,
k: number,
): matrix

Diagonal matrix creation and extraction of diagonals from a matrix.

For an input vector, creates a diagonal matrix. For a matrix input, extracts the k-th diagonal (0: main diagonal, k > 0: above main diagonal, k < 0: below main diagonal).

Examples

Create a diagonal matrix from a vector

import { assertEquals } from "jsr:@std/assert";

assertEquals(diag([5, 6, -3]), [[5, 0, 0], [0, 6, 0], [0, 0, -3]]);

Create a diagonal matrix with k = 1

import { assertEquals } from "jsr:@std/assert";

assertEquals(diag([5, 6, -3], 1), [[0, 5, 0, 0], [0, 0, 6, 0], [0, 0, 0, -3], [0, 0, 0, 0]]);

Create a diagonal matrix with k = -1

import { assertEquals } from "jsr:@std/assert";

assertEquals(diag([5, 6, -3], -1), [[0, 0, 0, 0], [5, 0, 0, 0], [0, 6, 0, 0], [0, 0, -3, 0]]);

Extract the main diagonal from a matrix

import { assertEquals } from "jsr:@std/assert";

assertEquals(diag([[5, 0, 0], [0, 6, 0], [0, 0, -3]]), [5, 6, -3]);

Extract the first superdiagonal from a matrix

import { assertEquals } from "jsr:@std/assert";

assertEquals(diag([[0, 5, 0, 0], [0, 0, 6, 0], [0, 0, 0, -3], [0, 0, 0, 0]], 1), [5, 6, -3]);

Extract the first subdiagonal from a matrix

import { assertEquals } from "jsr:@std/assert";

assertEquals(diag([[0, 0, 0, 0], [5, 0, 0, 0], [0, 6, 0, 0], [0, 0, -3, 0]], -1), [5, 6, -3]);

Extract a diagonal out of bounds (diagonal 2)

import { assertEquals } from "jsr:@std/assert";

assertEquals(diag([[5, 0, 0], [0, 6, 0], [0, 0, -3]], 2), [0]);

Parameters

Input array or matrix.

k: number

Index of the diagonal (0: main diagonal, k > 0 above, k < 0 below). Defaults to 0.

Return Type

Diagonal matrix or array of diagonal values.

Throws

If the input is neither a vector nor a matrix.

diag(
x: matrix,
k: number,
): array

Diagonal matrix creation and extraction of diagonals from a matrix.

For an input vector, creates a diagonal matrix. For a matrix input, extracts the k-th diagonal (0: main diagonal, k > 0: above main diagonal, k < 0: below main diagonal).

Examples

Create a diagonal matrix from a vector

import { assertEquals } from "jsr:@std/assert";

assertEquals(diag([5, 6, -3]), [[5, 0, 0], [0, 6, 0], [0, 0, -3]]);

Create a diagonal matrix with k = 1

import { assertEquals } from "jsr:@std/assert";

assertEquals(diag([5, 6, -3], 1), [[0, 5, 0, 0], [0, 0, 6, 0], [0, 0, 0, -3], [0, 0, 0, 0]]);

Create a diagonal matrix with k = -1

import { assertEquals } from "jsr:@std/assert";

assertEquals(diag([5, 6, -3], -1), [[0, 0, 0, 0], [5, 0, 0, 0], [0, 6, 0, 0], [0, 0, -3, 0]]);

Extract the main diagonal from a matrix

import { assertEquals } from "jsr:@std/assert";

assertEquals(diag([[5, 0, 0], [0, 6, 0], [0, 0, -3]]), [5, 6, -3]);

Extract the first superdiagonal from a matrix

import { assertEquals } from "jsr:@std/assert";

assertEquals(diag([[0, 5, 0, 0], [0, 0, 6, 0], [0, 0, 0, -3], [0, 0, 0, 0]], 1), [5, 6, -3]);

Extract the first subdiagonal from a matrix

import { assertEquals } from "jsr:@std/assert";

assertEquals(diag([[0, 0, 0, 0], [5, 0, 0, 0], [0, 6, 0, 0], [0, 0, -3, 0]], -1), [5, 6, -3]);

Extract a diagonal out of bounds (diagonal 2)

import { assertEquals } from "jsr:@std/assert";

assertEquals(diag([[5, 0, 0], [0, 6, 0], [0, 0, -3]], 2), [0]);

Parameters

Input array or matrix.

k: number

Index of the diagonal (0: main diagonal, k > 0 above, k < 0 below). Defaults to 0.

Return Type

Diagonal matrix or array of diagonal values.

Throws

If the input is neither a vector nor a matrix.