@@ -105,21 +105,17 @@ def _standardize_data(
105105
106106 design = _design_matrix (model , batch_key , batch_levels )
107107
108- # use numpty .values extration only once to avoid pandas overhead
109- design_arr = design .values
110108 # compute pooled variance estimator
111- b_hat = np .dot (
112- np .dot (la .inv (np .dot (design_arr .T , design_arr )), design_arr .T ), data .values .T
113- )
109+ b_hat = np .dot (np .dot (la .inv (np .dot (design .T , design )), design .T ), data .T )
114110 grand_mean = np .dot ((n_batches / n_array ).T , b_hat [:n_batch , :])
115- var_pooled = ( data . values - np .dot (design_arr , b_hat ).T ) ** 2
111+ var_pooled = np . asarray (( data - np .dot (design , b_hat ).T ) ** 2 )
116112 var_pooled = np .mean (var_pooled , axis = 1 , keepdims = True )
117113
118114 # Compute the means
119115 if np .sum (var_pooled == 0 ) > 0 :
120116 print (f"Found { np .sum (var_pooled == 0 )} genes with zero variance." )
121- stand_mean = grand_mean [:, np .newaxis ]
122- tmp = design_arr . copy ()
117+ stand_mean = np . asarray ( grand_mean ) [:, np .newaxis ]
118+ tmp = np . array ( design . copy () )
123119 tmp [:, :n_batch ] = 0
124120 stand_mean = stand_mean + np .dot (tmp , b_hat ).T
125121
@@ -128,7 +124,7 @@ def _standardize_data(
128124 s_data = np .where (
129125 var_pooled == 0 ,
130126 0 ,
131- (data . values - stand_mean ) / np .sqrt (var_pooled ),
127+ (np . asarray ( data ) - stand_mean ) / np .sqrt (var_pooled ),
132128 )
133129 s_data = pd .DataFrame (s_data , index = data .index , columns = data .columns )
134130
@@ -272,27 +268,24 @@ def combat( # noqa: PLR0915
272268
273269 # we now apply the parametric adjustment to the standardized data from above
274270 # loop over all batches in the data
275- bayesdata_arr = bayesdata .to_numpy (copy = True )
276- batch_design_arr = batch_design .values
277271 for j , batch_idxs in enumerate (batch_info .values ()):
278272 # we basically subtract the additive batch effect, rescale by the ratio
279273 # of multiplicative batch effect to pooled variance and add the overall gene
280274 # wise mean
281275 dsq = np .sqrt (delta_star [j , :])
282- numer = (
283- bayesdata_arr [:, batch_idxs ]
284- - np .dot (batch_design_arr [batch_idxs ], gamma_star ).T
276+ numer = np . array (
277+ bayesdata . iloc [:, batch_idxs ]
278+ - np .dot (batch_design . iloc [batch_idxs ], gamma_star ).T
285279 )
286- bayesdata_arr [:, batch_idxs ] = numer / dsq [:, np .newaxis ]
280+ bayesdata . iloc [:, batch_idxs ] = numer / dsq [:, np .newaxis ]
287281
288- bayesdata_arr = bayesdata_arr * np .sqrt (var_pooled ) + stand_mean
282+ bayesdata = bayesdata * np .sqrt (var_pooled ) + stand_mean
289283
290284 # put back into the adata object or return
291- x = bayesdata .to_numpy ().transpose ()
292285 if inplace :
293- adata .X = bayesdata_arr . T
286+ adata .X = bayesdata . to_numpy (). transpose ()
294287 return None
295- return bayesdata_arr . T
288+ return bayesdata . to_numpy (). transpose ()
296289
297290
298291def _it_sol (
0 commit comments