29 lines
829 B
Python
29 lines
829 B
Python
|
class Packer:
|
||
|
"""A compression object used to speed up model calculations.
|
||
|
|
||
|
Often used in conjunction with crossvalidation and perturbations
|
||
|
analysis.
|
||
|
"""
|
||
|
def __init__(self,array):
|
||
|
self._shape = array.shape
|
||
|
self._array = array
|
||
|
self._packed_data = None
|
||
|
|
||
|
def expand(self,a):
|
||
|
if self._inflater!=None:
|
||
|
return dot(self._inflater,a)
|
||
|
|
||
|
def collapse(self,axis=None,mode='svd'):
|
||
|
if not axis:
|
||
|
axis = argmin(self._array.shape) # default is the smallest dim
|
||
|
|
||
|
if axis == 1:
|
||
|
self._array = self._array.T
|
||
|
u, s, vt = svd(self._array,full_matrices=0)
|
||
|
self._inflater = vt.T
|
||
|
self._packed_data = u*s
|
||
|
return self._packed_data
|
||
|
|
||
|
def get_packed_data(self):
|
||
|
return self._packed_data
|