1 """
2 This is a helper module for the low rank code
3 """
4
5 import math
6 import random
7
8
9
10
12 """
13 Computes dot products of the given two vectors and returns the dot product value
14
15 @type x: vector
16 @param x: vector
17 @type y: vector
18 @param y: vector
19
20 @rtype: double
21 @return: returns the dot product value of two vectors
22 """
23 n = min(len(x),len(y))
24 ret = 0.0
25 for i in range(n):
26 ret = ret + x[i]*y[i]
27 return ret
28
30 """
31 This method adds scaled vector to the given other vector
32
33 @type dst: vector
34 @param dst: dst vector
35 @type src: vector
36 @param src: src vector which will be scaled
37 @type s: double
38 @param s: scale factor
39
40 """
41 n = min(len(dst),len(src))
42 for i in range(n):
43 dst[i] = dst[i] + src[i]*s
44
46 """
47 This function normalizes given vector if its norm square is greater than the given threshold
48
49 @type x: vector
50 @param x: given vector to normalized
51 @type B: double
52 @param B: given norm
53 @type B2: double
54 @param B2: norm threshold
55 """
56 norm_square = sum([xi*xi for xi in x])
57 if(norm_square > B2):
58 norm = math.sqrt(norm_square)
59 for i in range(len(x)):
60 x[i] = x[i]* B/norm
61
63 """
64 Creates random vector with the given dimension
65
66 @type dim: number
67 @param dim: dimension of the random vector
68
69 @rtype: vector
70 @return: random vector with the given dim
71 """
72 return [ random.gauss(0,1) * 1e-2 for i in range(dim) ]
73
75 """
76 Make initial function
77 @type max_rank: double
78 @param max_rank: max rank(dim)
79 @type nRows: number
80 @param nRows: # of rows
81 @type nCols: number
82 @param nCols: #of cols
83 @type B: double
84 @param B: B
85
86 @rtype: tuple
87 @return: returns L and R
88 """
89 L = []
90 R = []
91 for i in range(nRows):
92 random_vec = make_random_vec(max_rank)
93 ball_project(random_vec, B, B*B)
94 L.append(random_vec)
95
96 for i in range(nCols):
97 random_vec = make_random_vec(max_rank)
98 ball_project(random_vec, B, B*B)
99 R.append(random_vec)
100 return (L,R)
101
102
104 """
105 Gets bucket
106 @type nsplits: number
107 @param nsplits: splits
108 @type nrows: number
109 @param nrows: # of rows
110 @type row: number
111 @param row: row index
112 @type row_map: vector
113 @param row_map: row map
114
115 @rtype: number
116 @return: bucket
117 """
118 row_i = row_map[row]
119 row_bucket_size = nrows/nsplits
120 return max(row_i/row_bucket_size, nsplits - 1)
121
123 """
124
125 """
126 splits = [[] for z in nSplits]
127 for i in range(len(X)):
128 b = get_bucket(nsplits, nRows, i, row_perm)
129 splits[b].append(L[i])
130 return splits
131
133 l_split = split_a_model(nSplits, nRows, L, row_perm)
134 r_split = split_a_model(nSplits, nCols, R, col_perm)
135 return [l_split, r_split]
136
137
138
139
141 return "victor_%d_%d" % (mid,epoch_sign)
142
145
146
149
152
154 return (round - chunk) % nsplits
155
158
160 l = get_l_chunk(nsplits, round, chunk)
161 r = get_r_chunk(nsplits, round, chunk)
162 return l * nsplits + r
163
167
168
170 try:
171 (i,vec) = self.iter.next()
172 except StopIteration:
173 return ''
174 else:
175 return "%d\t%s\n" % (i,vec)
176
177 - def read(self, size=None):
179
181 return "{%s}" % (','.join([str(x) for x in v]))
182
183
184
185
186
187
188
189
190
191