12
12
from .basic_linalg import trp
13
13
14
14
15
- def generate_precision_matrix (p = 100 , M = 10 , style = 'powerlaw' , gamma = 2.8 , prob = 0.1 , scale = False , nxseed = None ):
15
+ def generate_precision_matrix (p = 100 , M = 10 , style = 'powerlaw' , gamma = 2.8 , prob = 0.1 , scale = False , seed = None ):
16
16
"""
17
17
Generates a sparse precision matrix with associated covariance matrix from a random network.
18
18
@@ -36,8 +36,8 @@ def generate_precision_matrix(p=100, M=10, style = 'powerlaw', gamma = 2.8, prob
36
36
scale : boolean, optional
37
37
whether Sigma (cov. matrix) is scaled by diagonal entries (as described by Danaher et al.). If set to True, then the generated precision matrix is not
38
38
the inverse of Sigma anymore.
39
- nxseed : int, optional
40
- Seed for network creation. The default is None.
39
+ seed : int, optional
40
+ Seed for network creation and matrix entries . The default is None.
41
41
42
42
Returns
43
43
-------
@@ -55,6 +55,11 @@ def generate_precision_matrix(p=100, M=10, style = 'powerlaw', gamma = 2.8, prob
55
55
A = np .zeros ((p ,p ))
56
56
Sigma = np .zeros ((p ,p ))
57
57
58
+ if seed is not None :
59
+ nxseed = seed
60
+ else :
61
+ nxseed = None
62
+
58
63
for m in np .arange (M ):
59
64
60
65
if nxseed is not None :
@@ -69,7 +74,9 @@ def generate_precision_matrix(p=100, M=10, style = 'powerlaw', gamma = 2.8, prob
69
74
A_m = nx .to_numpy_array (G_m )
70
75
71
76
# generate random numbers for the nonzero entries
72
- np .random .seed (1234 )
77
+ if seed is not None :
78
+ np .random .seed (seed )
79
+
73
80
B1 = np .random .uniform (low = .1 , high = .4 , size = (L ,L ))
74
81
B2 = np .random .choice (a = [- 1 ,1 ], p = [.5 , .5 ], size = (L ,L ))
75
82
@@ -121,7 +128,7 @@ def generate_precision_matrix(p=100, M=10, style = 'powerlaw', gamma = 2.8, prob
121
128
122
129
return Sigma , Theta
123
130
124
- def time_varying_power_network (p = 100 , K = 10 , M = 10 , scale = False , nxseed = None ):
131
+ def time_varying_power_network (p = 100 , K = 10 , M = 10 , scale = False , seed = None ):
125
132
"""
126
133
generates a power law network. The first block disappears at half-time, while the second block appears
127
134
third block decays exponentially
@@ -135,7 +142,7 @@ def time_varying_power_network(p=100, K=10, M=10, scale = False, nxseed = None):
135
142
assert M * L == p
136
143
assert M >= 3
137
144
138
- Sigma_0 ,_ = generate_precision_matrix (p = p , M = M , style = 'powerlaw' , scale = scale , nxseed = nxseed )
145
+ Sigma_0 ,_ = generate_precision_matrix (p = p , M = M , style = 'powerlaw' , scale = scale , seed = seed )
139
146
140
147
for k in np .arange (K ):
141
148
Sigma_k = Sigma_0 .copy ()
@@ -160,7 +167,7 @@ def time_varying_power_network(p=100, K=10, M=10, scale = False, nxseed = None):
160
167
161
168
return Sigma , Theta
162
169
163
- def group_power_network (p = 100 , K = 10 , M = 10 , scale = False , nxseed = None ):
170
+ def group_power_network (p = 100 , K = 10 , M = 10 , scale = False , seed = None ):
164
171
"""
165
172
generates a power law network. In each single network one block disappears (randomly)
166
173
p: dimension
@@ -172,8 +179,11 @@ def group_power_network(p=100, K=10, M=10, scale = False, nxseed = None):
172
179
L = int (p / M )
173
180
assert M * L == p
174
181
175
- Sigma_0 ,_ = generate_precision_matrix (p = p , M = M , style = 'powerlaw' , scale = scale , nxseed = nxseed )
182
+ Sigma_0 ,_ = generate_precision_matrix (p = p , M = M , style = 'powerlaw' , scale = scale , seed = seed )
176
183
# contains the number of the block disappearing for each k=1,..,K
184
+ if seed is not None :
185
+ np .random .seed (seed )
186
+
177
187
block = np .random .randint (M , size = K )
178
188
179
189
for k in np .arange (K ):
@@ -200,11 +210,14 @@ def ensure_sparsity(Sigma, Theta):
200
210
return Sigma , Theta
201
211
202
212
203
- def sample_covariance_matrix (Sigma , N ):
213
+ def sample_covariance_matrix (Sigma , N , seed = None ):
204
214
"""
205
215
samples data for a given covariance matrix Sigma (with K layers)
206
216
return: sample covariance matrix S
207
217
"""
218
+ if seed is not None :
219
+ np .random .seed (seed )
220
+
208
221
if len (Sigma .shape ) == 2 :
209
222
assert abs (Sigma - Sigma .T ).max () <= 1e-10
210
223
(p ,p ) = Sigma .shape
0 commit comments