@@ -341,31 +341,31 @@ def stats(X, weights=None, compute_variance=False):
341
341
"""
342
342
is_numeric = np .issubdtype (X .dtype , np .number )
343
343
is_sparse = sp .issparse (X )
344
- weighted = weights is not None and X .dtype != object
345
- weights = weights if weighted else None
344
+
345
+ if X .size and is_numeric :
346
+ if compute_variance :
347
+ means , vars = nan_mean_variance_axis (X , axis = 0 , weights = weights )
348
+ else :
349
+ means = nanmean (X , axis = 0 , weights = weights )
350
+ vars = np .zeros (X .shape [1 ] if X .ndim == 2 else 1 )
346
351
347
352
if X .size and is_numeric and not is_sparse :
348
353
nans = np .isnan (X ).sum (axis = 0 )
349
354
return np .column_stack ((
350
355
np .nanmin (X , axis = 0 ),
351
356
np .nanmax (X , axis = 0 ),
352
- nanmean (X , axis = 0 , weights = weights ),
353
- nanvar (X , axis = 0 ) if compute_variance else \
354
- np .zeros (X .shape [1 ] if X .ndim == 2 else 1 ),
357
+ means ,
358
+ vars ,
355
359
nans ,
356
360
X .shape [0 ] - nans ))
357
361
elif is_sparse and X .size :
358
- if compute_variance and weighted :
359
- raise NotImplementedError
360
-
361
362
non_zero = np .bincount (X .nonzero ()[1 ], minlength = X .shape [1 ])
362
363
X = X .tocsc ()
363
364
return np .column_stack ((
364
365
nanmin (X , axis = 0 ),
365
366
nanmax (X , axis = 0 ),
366
- nanmean (X , axis = 0 , weights = weights ),
367
- nanvar (X , axis = 0 ) if compute_variance else \
368
- np .zeros (X .shape [1 ] if X .ndim == 2 else 1 ),
367
+ means ,
368
+ vars ,
369
369
X .shape [0 ] - non_zero ,
370
370
non_zero ))
371
371
else :
0 commit comments