def sum_columns(m): v = CuckooVector({}) for key,col in m.columns(): v.add(col) return v
def power_iteration(m, iterations, v0): v = CuckooVector({}) v.add(v0) for i in range(iterations): v = m.mult_vec(v) mu = v.norm(2) v.scale(1.0/mu) return mu,v
def power_iteration_mmt(m, iterations, v0): v = CuckooVector({}) v.add(v0) for i in range(iterations): vp = CuckooVector({}) for c in m: vp.add_scale(c, c.dot(v)) mu = vp.norm(2) vp.scale(1.0/mu) v = vp return mu,v
def power_iteration_4(Y, X, U, S, iterations, v0): v = CuckooVector({}) v.add(v0) for i in range(iterations): v1 = CuckooVector({}) for (x,y) in zip(X,Y): v1.add_scale_dict(x, v.dot_dict(y)) v2 = CuckooVector({}) for (x,y) in zip(X,Y): v2.add_scale_dict(y, v1.dot_dict(x)) for (u,s) in zip(U,S): print(-s * u.dot(v)) v2.add_scale(u, -s * u.dot(v)) mu = v2.norm(2) v2.scale(1.0/mu) v = v2 return mu,v