def __init__(self, V, rank, win, circular=False, alphaWf=0, alphaWt=0, betaWf=0, betaWt=0, **kwargs): SIPLCA2.__init__(self, V, rank, win, circular, **kwargs) self.VRWf = np.empty((self.F, self.rank)) self.VRWt = np.empty((self.rank, self.winT)) self.VRH = np.empty((self.T, self.rank, self.winF)) self.alphaWf = 1 + alphaWf self.alphaWt = 1 + alphaWt self.betaWf = betaWf self.betaWt = betaWt
def plot(self, V, Wf, Wt, Z, H, curriter=-1): rank = len(Z) nrows = rank + 2 WZH = self.reconstruct(Wf, Wt, Z, H, circular=self.circular) W = Basilica.w_product(Wf, Wt) plottools.plotall([V, WZH] + [SIPLCA2.reconstruct(W[:,z,:], Z[z], H[z,:], circular=self.circular) for z in xrange(len(Z))], title=['V (Iteration %d)' % curriter, 'Reconstruction'] + ['Basis %d reconstruction' % x for x in xrange(len(Z))], colorbar=False, grid=False, cmap=plt.cm.hot, subplot=(nrows, 2), order='c', align='xy') plottools.plotall([None] + [Z], subplot=(nrows, 2), clf=False, plotfun=lambda x: plt.bar(np.arange(len(x)) - 0.4, x), xticks=[[], range(rank)], grid=False, colorbar=False, title='Z') plots = [None] * (3*nrows + 2) titles = plots + ['W%d' % x for x in range(rank)] wxticks = [[]] * (3*nrows + rank + 1) + [range(0, W.shape[2], 10)] plots.extend(W.transpose((1, 0, 2))) plottools.plotall(plots, subplot=(nrows, 6), clf=False, order='c', align='xy', cmap=plt.cm.hot, colorbar=False, ylabel=r'$\parallel$', grid=False, title=titles, yticks=[[]], xticks=wxticks) plots = [None] * (2*nrows + 2) titles=plots + ['H%d' % x for x in range(rank)] if np.squeeze(H).ndim < 4: plotH = np.squeeze(H) else: plotH = H.sum(2) if rank == 1: plotH = [plotH] plots.extend(plotH) plottools.plotall(plots, subplot=(nrows, 3), order='c', align='xy', grid=False, clf=False, title=titles, yticks=[[]], colorbar=False, cmap=plt.cm.hot, ylabel=r'$*$', xticks=[[]]*(3*nrows-1) + [range(0, V.shape[1], 100)]) plt.draw()
def initialize(self): W, Z, H = SIPLCA2.initialize(self) Wf = normalize(np.random.rand(self.F, self.rank), 0) Wt = normalize(np.random.rand(self.rank, self.winT), 1) return Wf, Wt, Z, H
def reconstruct(Wf, Wt, Z, H, norm=1.0, circular=False): W = Basilica.w_product(Wf, Wt) return SIPLCA2.reconstruct(W, Z, H, norm, circular)