Source code for toqito.matrices.cyclic_permutation_matrix
"""Generates a cyclic permutation matrix."""
import numpy as np
[docs]
def cyclic_permutation_matrix(n: int, k: int = 1) -> np.ndarray:
r"""Create the cyclic permutation matrix for a given dimension `n` [@WikiCyclicPermutation].
This function creates a cyclic permutation matrix of 0's and 1's which is a special type of square matrix
that represents a cyclic permutation of its rows. The function allows fixed points and successive applications.
Examples:
Generate fixed point.
```python exec="1" source="above"
from toqito.matrices import cyclic_permutation_matrix
print(cyclic_permutation_matrix(n=4))
```
Generate successive application.
```python exec="1" source="above"
from toqito.matrices import cyclic_permutation_matrix
print(cyclic_permutation_matrix(n=4, k=3))
```
Args:
n: int The number of rows and columns in the cyclic permutation matrix.
k: int The power to which the elements are raised, representing successive applications.
Returns:
A NumPy array representing a cyclic permutation matrix of dimension `n x n`. Each row of the matrix is shifted
one position to the right in a cyclic manner, creating a circular permutation pattern. If `k` is specified, the
function raises the matrix to the power of `k`, representing successive applications of the cyclic permutation.
"""
if not isinstance(n, int):
raise TypeError("'n' must be an integer.")
if n <= 0:
raise ValueError("'n' must be a positive integer.")
if not isinstance(k, int):
raise TypeError("'k' must be an integer.")
p_mat = np.zeros((n, n), dtype=int)
np.fill_diagonal(p_mat[1:], 1)
p_mat[0, -1] = 1
result_mat = np.linalg.matrix_power(p_mat, k)
return result_mat