Source code for toqito.matrix_props.kp_norm

"""Computes the Kp-norm for matrices or vectors."""

import numpy as np


[docs] def kp_norm(mat: np.ndarray, k: int, p: int) -> float | np.floating: r"""Compute the kp_norm of vector or matrix. Calculate the p-norm of a vector or the k-largest singular values of a matrix. Examples: To compute the p-norm of a vector ```python exec="1" source="above" import numpy as np from toqito.states import bell from toqito.matrix_props import kp_norm print(np.around(kp_norm(bell(0), 1, np.inf), decimals=2)) ``` To compute the k-largest singular values of a matrix: ```python exec="1" source="above" import numpy as np from toqito.matrix_props import kp_norm from toqito.rand import random_unitary print(np.around(kp_norm(random_unitary(5), 5, 2), decimals=2)) ``` Args: mat: 2D numpy ndarray k: The number of singular values to take. p: The order of the norm. Returns: The kp-norm of a matrix. """ dim = min(mat.shape) # If the requested norm is the Frobenius norm, compute it using numpy's # built-in Frobenius norm calculation, which is significantly faster than # computing singular values. if k >= dim and p == 2: return np.linalg.norm(mat, ord="fro") s_vals = np.linalg.svd(mat, compute_uv=False) return np.linalg.norm(s_vals[:k], ord=p)