11import numpy as np
2+ import pysensors
23
34from pysensors .optimizers ._qr import QR
45
@@ -110,17 +111,18 @@ def fit(
110111 i_piv = np .argmax (dlens_updated )
111112 dlen = dlens_updated [i_piv ]
112113 elif self .constraint_option == "radii_constraints" :
113- if j == 0 :
114- dlens_old = dlens
114+
115+ if j == 0 :
115116 i_piv = np .argmax (dlens )
116117 dlen = dlens [i_piv ]
118+ dlens_old = dlens
117119 else :
118120
119- dlens_updated = ps .utils ._norm_calc .f_radii_constraint (j ,dlens ,dlens_old ,p ,self ._nx ,self ._ny ,self ._r ) #( self.radius,self._nx,self._ny,self.all_sensorloc,dlens,p,j)
121+ dlens_updated = ps .utils ._norm_calc .f_radii_constraint (j ,dlens ,dlens_old ,p ,self ._nx ,self ._ny ,self ._r , self . all_sensorloc , self . nSensors ) #( self.radius,self._nx,self._ny,self.all_sensorloc,dlens,p,j)
120122 i_piv = np .argmax (dlens_updated )
121123 dlen = dlens_updated [i_piv ]
122124 dlens_old = dlens_updated
123-
125+
124126 # Choose pivot
125127 # i_piv = np.argmax(dlens_updated)
126128
@@ -146,30 +148,30 @@ def fit(
146148 R [j + 1 :, j ] = 0
147149
148150 self .pivots_ = p
149- self .optimality = np .trace (np .real (R ))
150- print ("The trace(R) = {}" .format (self .optimality ))
151-
151+
152152 return self
153153
154154if __name__ == '__main__' :
155155 faces = datasets .fetch_olivetti_faces (shuffle = True )
156156 X = faces .data
157157
158- n_samples , n_features = X .shape
158+ # n_samples, n_features = X.shape
159+ X_small = X [:,:256 ]
160+ n_samples , n_features = X_small .shape
159161 print ('Number of samples:' , n_samples )
160162 print ('Number of features (sensors):' , n_features )
161163
162164 # Global centering
163- X = X - X .mean (axis = 0 )
165+ X_small = X_small - X_small .mean (axis = 0 )
164166
165167 # Local centering
166- X -= X .mean (axis = 1 ).reshape (n_samples , - 1 )
168+ X_small -= X_small .mean (axis = 1 ).reshape (n_samples , - 1 )
167169
168170 n_row , n_col = 2 , 3
169171 n_components = n_row * n_col
170- image_shape = (64 , 64 )
171- nx = 64
172- ny = 64
172+ image_shape = (16 , 16 )
173+ nx = 16
174+ ny = 16
173175
174176 def plot_gallery (title , images , n_col = n_col , n_row = n_row , cmap = plt .cm .gray ):
175177 '''Function for plotting faces'''
@@ -190,29 +192,29 @@ def plot_gallery(title, images, n_col=n_col, n_row=n_row, cmap=plt.cm.gray):
190192 #Find all sensor locations using built in QR optimizer
191193 #max_const_sensors = 230
192194 n_const_sensors = 3
193- n_sensors = 10
195+ n_sensors = 4
194196 n_modes = 40
195- r = 5
196- dmd = DMD (svd_rank = 0 ,exact = True ,opt = False )
197- dmd .fit (X .T )
198- U = dmd .modes .real
199- np .shape (U )
200- max_basis_modes = 200
201-
202- model_dmd_unconstrained = ps .SSPOR (n_sensors = n_sensors , basis = ps .basis .Custom (n_basis_modes = n_modes , U = U ))
203- model_dmd_unconstrained .fit (X )
204- basis_matrix_dmd = model_dmd_unconstrained .basis_matrix_
205-
206- all_sensors_dmd_unconstrained = model_dmd_unconstrained .get_all_sensors ()
207- top_sensors_dmd_unconstrained = model_dmd_unconstrained .get_selected_sensors ()
208- optimality_dmd = ps .utils ._validation .determinant (top_sensors_dmd_unconstrained , n_features , basis_matrix_dmd )
197+ r = 2
198+ # dmd = DMD(svd_rank=0,exact=True,opt=False)
199+ # dmd.fit(X.T)
200+ # U = dmd.modes.real
201+ # np.shape(U)
202+ # max_basis_modes = 200
203+
204+ # model_dmd_unconstrained = ps.SSPOR(n_sensors=n_sensors, basis=ps.basis.Custom(n_basis_modes=n_modes, U=U))
205+ # model_dmd_unconstrained.fit(X)
206+ # basis_matrix_dmd = model_dmd_unconstrained.basis_matrix_
207+
208+ # all_sensors_dmd_unconstrained = model_dmd_unconstrained.get_all_sensors()
209+ # top_sensors_dmd_unconstrained = model_dmd_unconstrained.get_selected_sensors()
210+ # optimality_dmd = ps.utils._validation.determinant(top_sensors_dmd_unconstrained, n_features, basis_matrix_dmd)
209211 # print(optimality0)
210- # basis = ps.basis.SVD(n_basis_modes=n_modes)
211- # optimizer = ps.optimizers.QR()
212- # model = ps.SSPOR(basis = basis, optimizer=optimizer, n_sensors=n_sensors)
213- # model.fit(X )
214- # top_sensors0 = model.get_selected_sensors()
215- # all_sensors = model.get_all_sensors()
212+ #basis = ps.basis.SVD(n_basis_modes=n_modes)
213+ optimizer = ps .optimizers .QR ()
214+ model = ps .SSPOR (optimizer = optimizer , n_sensors = n_sensors )
215+ model .fit (X_small )
216+ top_sensors0 = model .get_selected_sensors ()
217+ all_sensors = model .get_all_sensors ()
216218 # basis_matrix0 = model.basis_matrix_
217219 # optimality0 = ps.utils._validation.determinant(top_sensors0, n_features, basis_matrix0)
218220 # print(optimality0)
@@ -221,10 +223,11 @@ def plot_gallery(title, images, n_col=n_col, n_row=n_row, cmap=plt.cm.gray):
221223 xmax = 64
222224 ymin = 10
223225 ymax = 30
224- sensors_constrained = ps .utils ._constraints .get_constraind_sensors_indices (xmin ,xmax ,ymin ,ymax ,nx ,ny ,all_sensors_dmd_unconstrained ) #Constrained column indices
226+ sensors_constrained = ps .utils ._constraints .get_constraind_sensors_indices (xmin ,xmax ,ymin ,ymax ,nx ,ny ,all_sensors ) #Constrained column indices
225227 # didx = np.isin(all_sensors,sensors_constrained,invert=False)
226228 # const_index = np.nonzero(didx)
227229 # j =
230+
228231
229232
230233 ##Plotting the constrained region
@@ -241,49 +244,51 @@ def plot_gallery(title, images, n_col=n_col, n_row=n_row, cmap=plt.cm.gray):
241244 # plt.title('Constrained region');
242245
243246 ## Fit the dataset with the optimizer GQR
244- # optimizer1 = GQR(sensors_constrained,n_sensors,n_const_sensors,all_sensors, constraint_option = "max_n_const_sensors ",nx = nx, ny = ny, r = r)
245- # model1 = ps.SSPOR(basis = basis, optimizer = optimizer1, n_sensors = n_sensors)
246- # model1.fit(X )
247- # all_sensors1 = model1.get_all_sensors()
248- # basis_matrix = model1.basis_matrix_
249- # top_sensors = model1.get_selected_sensors()
250- # print(top_sensors)
247+ optimizer1 = GQR (sensors_constrained ,n_sensors ,n_const_sensors ,all_sensors , constraint_option = "radii_constraints " ,nx = nx , ny = ny , r = r )
248+ model1 = ps .SSPOR ( optimizer = optimizer1 , n_sensors = n_sensors )
249+ model1 .fit (X_small )
250+ all_sensors1 = model1 .get_all_sensors ()
251+ basis_matrix = model1 .basis_matrix_
252+ top_sensors = model1 .get_selected_sensors ()
253+ print (top_sensors )
251254 # optimality = ps.utils._validation.determinant(top_sensors, n_features, basis_matrix)
252255 # print(optimality)
253- optimizer_dmd_constrained = ps .optimizers .GQR (sensors_constrained ,n_sensors ,n_const_sensors ,all_sensors_dmd_unconstrained ,constraint_option = "exact_n_const_sensors" ,nx = nx , ny = ny , r = r )
254- model_dmd_constrained = ps .SSPOR (n_sensors = n_sensors , basis = ps .basis .Custom (n_basis_modes = n_modes , U = U ), optimizer = optimizer_dmd_constrained )
255- model_dmd_constrained .fit (X )
256- all_sensors_dmd_constrained = model_dmd_constrained .get_all_sensors ()
257-
258- top_sensors_dmd_constrained = model_dmd_constrained .get_selected_sensors ()
259- basis_matrix_dmd_constrained = model_dmd_constrained .basis_matrix_
260- optimality = ps .utils ._validation .determinant (top_sensors_dmd_constrained , n_features , basis_matrix_dmd_constrained )
256+ # optimizer_dmd_constrained = ps.optimizers.GQR(sensors_constrained,n_sensors,n_const_sensors,all_sensors_dmd_unconstrained,constraint_option = "exact_n_const_sensors",nx = nx, ny = ny, r = r)
257+ # model_dmd_constrained = ps.SSPOR(n_sensors=n_sensors, basis=ps.basis.Custom(n_basis_modes=n_modes, U=U), optimizer = optimizer_dmd_constrained)
258+ # model_dmd_constrained.fit(X)
259+ # all_sensors_dmd_constrained = model_dmd_constrained.get_all_sensors()
260+
261+ # top_sensors_dmd_constrained = model_dmd_constrained.get_selected_sensors()
262+ # basis_matrix_dmd_constrained = model_dmd_constrained.basis_matrix_
263+ # optimality = ps.utils._validation.determinant(top_sensors_dmd_constrained, n_features, basis_matrix_dmd_constrained)
261264 # print(optimality)
262265
263266 ## TODO: this can be done using ravel and unravel more elegantly
264267 #yConstrained = np.floor(top_sensors[:n_const_sensors]/np.sqrt(n_features))
265268 #xConstrained = np.mod(top_sensors[:n_const_sensors],np.sqrt(n_features))
266269
267- img = np .zeros (n_features )
268- img [top_sensors_dmd_constrained ] = 16
269- #plt.plot(xConstrained,yConstrained,'*r')
270- plt .plot ([xmin ,xmin ],[ymin ,ymax ],'r' )
271- plt .plot ([xmin ,xmax ],[ymax ,ymax ],'r' )
272- plt .plot ([xmax ,xmax ],[ymin ,ymax ],'r' )
273- plt .plot ([xmin ,xmax ],[ymin ,ymin ],'r' )
274- plt .imshow (img .reshape (image_shape ),cmap = plt .cm .binary )
275- plt .title ('n_sensors = {}, n_constr_sensors = {}' .format (n_sensors ,n_const_sensors ))
276- plt .show ()
277-
278270 # img = np.zeros(n_features)
279- # img[top_sensors] = 16
280- # fig,ax = plt.subplots(1)
281- # ax.set_aspect('equal')
282- # ax.imshow(img.reshape(image_shape),cmap=plt.cm.binary)
283- # print(top_sensors)
284- # top_sensors_grid = np.unravel_index(top_sensors, (nx,ny))
285- # # figure, axes = plt.subplots()
286- # for i in range(len(top_sensors_grid[0])):
287- # circ = Circle( (top_sensors_grid[1][i], top_sensors_grid[0][i]), r ,color='r',fill = False )
288- # ax.add_patch(circ)
271+ # img[top_sensors_dmd_constrained] = 16
272+ # #plt.plot(xConstrained,yConstrained,'*r')
273+ # plt.plot([xmin,xmin],[ymin,ymax],'r')
274+ # plt.plot([xmin,xmax],[ymax,ymax],'r')
275+ # plt.plot([xmax,xmax],[ymin,ymax],'r')
276+ # plt.plot([xmin,xmax],[ymin,ymin],'r')
277+ # plt.imshow(img.reshape(image_shape),cmap=plt.cm.binary)
278+ # plt.title('n_sensors = {}, n_constr_sensors = {}'.format(n_sensors,n_const_sensors))
289279 # plt.show()
280+
281+ img = np .zeros (n_features )
282+ img [top_sensors ] = 16
283+ fig ,ax = plt .subplots (1 )
284+ ax .set_aspect ('equal' )
285+ ax .imshow (img .reshape (image_shape ),cmap = plt .cm .binary )
286+ print (top_sensors )
287+ top_sensors_grid = np .unravel_index (top_sensors , (nx ,ny ))
288+ # figure, axes = plt.subplots()
289+ for i in range (len (top_sensors_grid [0 ])):
290+ circ = Circle ( (top_sensors_grid [1 ][i ], top_sensors_grid [0 ][i ]), r ,color = 'r' ,fill = False )
291+ ax .add_patch (circ )
292+ plt .show ()
293+
294+
0 commit comments