@@ -126,13 +126,14 @@ def square_dist(self, X, Z):
126
126
X = tt .mul (X , 1.0 / self .lengthscales )
127
127
Xs = tt .sum (tt .square (X ), 1 )
128
128
if Z is None :
129
- return - 2.0 * tt .dot (X , tt .transpose (X )) + \
130
- (tt .reshape (Xs , (- 1 , 1 )) + tt .reshape (Xs , (1 , - 1 )))
129
+ sqd = - 2.0 * tt .dot (X , tt .transpose (X )) + \
130
+ (tt .reshape (Xs , (- 1 , 1 )) + tt .reshape (Xs , (1 , - 1 )))
131
131
else :
132
132
Z = tt .mul (Z , 1.0 / self .lengthscales )
133
133
Zs = tt .sum (tt .square (Z ), 1 )
134
- return - 2.0 * tt .dot (X , tt .transpose (Z )) + \
135
- (tt .reshape (Xs , (- 1 , 1 )) + tt .reshape (Zs , (1 , - 1 )))
134
+ sqd = - 2.0 * tt .dot (X , tt .transpose (Z )) + \
135
+ (tt .reshape (Xs , (- 1 , 1 )) + tt .reshape (Zs , (1 , - 1 )))
136
+ return tt .clip (sqd , 0.0 , np .inf )
136
137
137
138
def euclidean_dist (self , X , Z ):
138
139
r2 = self .square_dist (X , Z )
@@ -337,13 +338,14 @@ def square_dist(self, X, Z):
337
338
X = tt .as_tensor_variable (X )
338
339
Xs = tt .sum (tt .square (X ), 1 )
339
340
if Z is None :
340
- return - 2.0 * tt .dot (X , tt .transpose (X )) + \
341
- (tt .reshape (Xs , (- 1 , 1 )) + tt .reshape (Xs , (1 , - 1 )))
341
+ sqd = - 2.0 * tt .dot (X , tt .transpose (X )) + \
342
+ (tt .reshape (Xs , (- 1 , 1 )) + tt .reshape (Xs , (1 , - 1 )))
342
343
else :
343
344
Z = tt .as_tensor_variable (Z )
344
345
Zs = tt .sum (tt .square (Z ), 1 )
345
- return - 2.0 * tt .dot (X , tt .transpose (Z )) + \
346
- (tt .reshape (Xs , (- 1 , 1 )) + tt .reshape (Zs , (1 , - 1 )))
346
+ sqd = - 2.0 * tt .dot (X , tt .transpose (Z )) + \
347
+ (tt .reshape (Xs , (- 1 , 1 )) + tt .reshape (Zs , (1 , - 1 )))
348
+ return tt .clip (sqd , 0.0 , np .inf )
347
349
348
350
def __call__ (self , X , Z = None ):
349
351
X , Z = self ._slice (X , Z )
0 commit comments