@@ -62,8 +62,8 @@ def fit(
62
62
Alternate allele counts with missing values encoded as either nan
63
63
or negative numbers.
64
64
"""
65
- X = da . ma . masked_array ( X , mask = da . isnan ( X ) | ( X < 0 ) )
66
- self .mean_ = da .ma . filled ( da . mean ( X , axis = 0 ), fill_value = np . nan )
65
+ X = _replace_missing_with_nan ( X )
66
+ self .mean_ = da .nanmean ( X , axis = 0 )
67
67
p = self .mean_ / self .ploidy
68
68
self .scale_ = da .sqrt (p * (1 - p ))
69
69
self .n_features_in_ = X .shape [1 ]
@@ -90,10 +90,10 @@ def transform(
90
90
Alternate allele counts with missing values encoded as either nan
91
91
or negative numbers.
92
92
"""
93
- X = da . ma . masked_array ( X , mask = da . isnan ( X ) | ( X < 0 ) )
93
+ X = _replace_missing_with_nan ( X )
94
94
X -= self .mean_
95
95
X /= self .scale_
96
- return da . ma . filled ( X , fill_value = np . nan )
96
+ return X
97
97
98
98
def inverse_transform (self , X : ArrayLike , copy : Optional [bool ] = None ) -> ArrayLike :
99
99
"""Invert transform
@@ -109,6 +109,14 @@ def inverse_transform(self, X: ArrayLike, copy: Optional[bool] = None) -> ArrayL
109
109
return X
110
110
111
111
112
+ def _replace_missing_with_nan (X ):
113
+ if np .issubdtype (X .dtype , np .floating ):
114
+ nanarray = da .asarray (np .nan , dtype = X .dtype )
115
+ else :
116
+ nanarray = da .asarray (np .nan )
117
+ return da .where (X < 0 , nanarray , X )
118
+
119
+
112
120
def filter_partial_calls (
113
121
ds : Dataset ,
114
122
* ,
0 commit comments