@@ -961,8 +961,8 @@ class _X_operator(sparse.linalg.LinearOperator):
961
961
"""
962
962
963
963
def __init__ (self , X , X_mean , sqrt_sw ):
964
- self . n_samples , self . n_features = X .shape
965
- super ().__init__ (X .dtype , (self . n_samples , self . n_features + 1 ))
964
+ n_samples , n_features = X .shape
965
+ super ().__init__ (X .dtype , (n_samples , n_features + 1 ))
966
966
self .X = X
967
967
self .X_mean = X_mean
968
968
self .sqrt_sw = sqrt_sw
@@ -991,15 +991,16 @@ class _Xt_operator(sparse.linalg.LinearOperator):
991
991
"""
992
992
993
993
def __init__ (self , X , X_mean , sqrt_sw ):
994
- self . n_samples , self . n_features = X .shape
995
- super ().__init__ (X .dtype , (self . n_features + 1 , self . n_samples ))
994
+ n_samples , n_features = X .shape
995
+ super ().__init__ (X .dtype , (n_features + 1 , n_samples ))
996
996
self .X = X
997
997
self .X_mean = X_mean
998
998
self .sqrt_sw = sqrt_sw
999
999
1000
1000
def _matvec (self , v ):
1001
1001
v = v .ravel ()
1002
- res = np .empty (self .n_features + 1 )
1002
+ n_features = self .shape [0 ]
1003
+ res = np .empty (n_features )
1003
1004
res [:- 1 ] = (
1004
1005
safe_sparse_dot (self .X .T , v , dense_output = True ) -
1005
1006
(self .X_mean * self .sqrt_sw .dot (v ))
@@ -1008,7 +1009,8 @@ def _matvec(self, v):
1008
1009
return res
1009
1010
1010
1011
def _matmat (self , v ):
1011
- res = np .empty ((self .n_features + 1 , v .shape [1 ]))
1012
+ n_features = self .shape [0 ]
1013
+ res = np .empty ((n_features , v .shape [1 ]))
1012
1014
res [:- 1 ] = (
1013
1015
safe_sparse_dot (self .X .T , v , dense_output = True ) -
1014
1016
self .X_mean [:, None ] * self .sqrt_sw .dot (v )
@@ -1119,8 +1121,9 @@ def _compute_gram(self, X, sqrt_sw):
1119
1121
X_mean *= n_samples / sqrt_sw .dot (sqrt_sw )
1120
1122
X_mX = sqrt_sw [:, None ] * safe_sparse_dot (
1121
1123
X_mean , X .T , dense_output = True )
1122
- X_mX_m = np .empty ((n_samples , n_samples ), dtype = X .dtype )
1123
- X_mX_m [:, :] = np .dot (X_mean , X_mean )
1124
+ X_mX_m = np .full ((n_samples , n_samples ),
1125
+ fill_value = np .dot (X_mean , X_mean ),
1126
+ dtype = X .dtype )
1124
1127
X_mX_m *= sqrt_sw
1125
1128
X_mX_m *= sqrt_sw [:, None ]
1126
1129
return (safe_sparse_dot (X , X .T , dense_output = True ) + X_mX_m
@@ -1275,7 +1278,6 @@ def _solve_covariance_sparse_no_intercept(
1275
1278
Used when we have a decomposition of X^T.X
1276
1279
(n_features < n_samples and X is sparse), and not fitting an intercept.
1277
1280
"""
1278
- n_samples , n_features = X .shape
1279
1281
w = 1 / (s + alpha )
1280
1282
A = (V * w ).dot (V .T )
1281
1283
AXy = A .dot (safe_sparse_dot (X .T , y , dense_output = True ))
@@ -1294,7 +1296,6 @@ def _solve_covariance_sparse_intercept(
1294
1296
(n_features < n_samples and X is sparse),
1295
1297
and we are fitting an intercept.
1296
1298
"""
1297
- n_samples , n_features = X .shape
1298
1299
# the vector [0, 0, ..., 0, 1]
1299
1300
# is the eigenvector of X^TX which
1300
1301
# corresponds to the intercept; we cancel the regularization on
0 commit comments