toqito icon indicating copy to clipboard operation
toqito copied to clipboard

Feature: Check if matrix is an equilangular tight frame

Open vprusso opened this issue 1 year ago • 0 comments

Provide a function that takes in as input a matrix (as a numpy array) and returns True if the matrix constitutes an equilangular tight frame and False otherwise.

A function like the following could be written:

import numpy as np


def is_etf(mat: np.ndarray) -> bool:
    """Determine if matrix forms an equilangular tight frame (ETF).
    
    Definition taken from the condition of:
    http://users.cms.caltech.edu/~jtropp/conf/Tro05-Complex-Equiangular-SPIE-preprint.pdf
    """
    # Each column has unit norm.
    nrows, ncols = mat.shape[0], mat.shape[1]
    for col in range(ncols):
        if not np.isclose(np.linalg.norm(mat[:][col]), 1):
            return False
    
    # Columns are equilangular.
    vals = []
    for i in range(ncols):
        for j in range(ncols):
            if i != j:                
                vals.append(np.abs(inner_product(mat[:][i], mat[:][j])))
    if len(set(vals)) > 1:
        return False
    
    # Matrix forms a tight frame.
    return np.allclose(mat @ mat.conj().T, (ncols / nrows) * np.identity(nrows * ncols))

One would also need to provide proper documentation, examples, and unit tests for this function.

vprusso avatar Apr 20 '24 17:04 vprusso