%pylab inline n = 6 pre_t = rand(n, n) print pre_t col_sums = sum(pre_t, axis=0) print col_sums t = pre_t / col_sums print t sum(t, axis=0), t.min(), t.max() v = zeros(n) v[0] = 1 print t.dot(v) def ndot(m, n, v): for i in range(n): v = m.dot(v) return v print ndot(t, 1, v) print ndot(t, 2, v) print ndot(t, 10, v) print array([ndot(t, k, v) for k in (0, 1, 10, 20, 100, 101, 102)]) sum(ndot(t, 100, v)) print ndot(t, 100, t) vals, vecs = linalg.eig(t) print vals; print vecs eig0 = vecs[:,0] print eig0; print eig0/sum(eig0) pt = array([[0, 1], [1, 0]]) print array([ndot(pt, k, [1, 0]) for k in range(8)]) bpt = array([[0, .1, 0,.9], [.1, 0, .9, 0], [0, .9, 0,.1], [.9, 0, .1, 0]]) print array([ndot(bpt, k, [1, 0, 0, 0]) for k in range(8) + [100, 101]]) bt = array([[0, .1, 0, .9], [.1, 0, .9, 0], [0, .9, 0, 0.0999], [.9, 0, .1, 0.0001]]) print array([ndot(bt, k, [1, 0, 0, 0]) for k in range(8) + [100, 101, 100000, 100001]]) vals2, vecs2 = linalg.eig(bt) print vals2; print vecs2 vals2, vecs2= linalg.eig([[0.1, 0.1, 0.1, 0.7], [0.7, 0.1, 0.1, 0.1], [0.1, 0.7, 0.1, 0.1], [0.1, 0.1, 0.7, 0.1]]) print vals2; print vecs2 print vecs2[:,0] st_denorm = array([[ 1, 1, -1], [ 1, 1, 0], [-1, -1, 1.]]) def normcols(m): return m / (m**2).sum(axis=0)**0.5 st = normcols(st_denorm) print st print array([ndot(st, k, [1, 0, 0]) for k in range(10)]) print array([ndot(st, k, [0, 0, 1]) for k in range(10)]) def ndotn(m, n, v): for i in range(n): v = m.dot(v) v /= v.T.dot(v) return v print array([ndotn(m, k, [0, 0, 1]) for m in st, st_denorm for k in range(10) + [100, 101, 102, 1001, 10000]]) svals, svecs = linalg.eig(st) print svals; print svecs st_n = st / svals.max() print st_n minority_report = array([ndot(st_n, k, [0, 0, 1]) for k in range(8) + [100, 101]]) print minority_report first_eigenvector = svecs[:,0] minority_report[-1] / first_eigenvector print array([ndot(st_n, k, [1, 0, 0]) for k in range(8) + [100, 101]]) ndot(st_n, 100, [1, 0, 0]) / first_eigenvector print array([ndot(st_n, k, [0, 1, 1]) for k in range(8) + [100, 101]]) print ndot(st_n, 100, [0, .785, 1]) tl = array([[1, 1, 1], [1, 1, 0], [-1, -1, 1]]) tlvals, tlvecs = linalg.eig(tl) tl_n = tl / tlvals.max() print tl_n print tlvals; print tlvecs