Source code for ristretto.sketch.utils
"""
Module containing utility functions for
"""
from scipy import linalg
[docs]def orthonormalize(A, overwrite_a=True, check_finite=False):
"""orthonormalize the columns of A via QR decomposition"""
# NOTE: for A(m, n) 'economic' returns Q(m, k), R(k, n) where k is min(m, n)
# TODO: when does overwrite_a even work? (fortran?)
Q, _ = linalg.qr(A, overwrite_a=overwrite_a, check_finite=check_finite,
mode='economic', pivoting=False)
return Q
[docs]def perform_subspace_iterations(A, Q, n_iter=2, axis=1):
"""perform subspace iterations on Q"""
# TODO: can we figure out how not to transpose for row wise
if axis == 0:
Q = Q.T
# orthonormalize Y, overwriting
Q = orthonormalize(Q)
# perform subspace iterations
for _ in range(n_iter):
if axis == 0:
Z = orthonormalize(A.dot(Q))
Q = orthonormalize(A.T.dot(Z))
else:
Z = orthonormalize(A.T.dot(Q))
Q = orthonormalize(A.dot(Z))
if axis == 0:
return Q.T
return Q