def _predict_transition_probabilities_numpy( X: np.ndarray, W: np.ndarray, softmax_scale: float = 1.0, center_mean: bool = True, scale_by_norm: bool = True, ) -> Tuple[np.ndarray, np.ndarray]: if center_mean: # pearson correlation W -= np.expand_dims(np_mean(W, axis=1), axis=1) if X.shape[0] == 1: if center_mean: # pearson correlation X = X - np.mean(X) if scale_by_norm: # cosine or pearson correlation denom = np.linalg.norm(X) * norm(W, axis=1) mask = denom == 0 denom[mask] = 1 return _softmax_masked(W.dot(X[0]) / denom, mask, softmax_scale) return _softmax(W.dot(X[0]), softmax_scale) assert X.shape[0] == W.shape[0], "Wrong shape." if center_mean: X = X - np.expand_dims(np_mean(X, axis=1), axis=1) if scale_by_norm: denom = norm(X, axis=1) * norm(W, axis=1) mask = denom == 0 denom[mask] = 1 return _softmax_masked( np.array([np.dot(X[i], W[i]) for i in range(X.shape[0])]) / denom, mask, softmax_scale, ) return _softmax(np.array([np.dot(X[i], W[i]) for i in range(X.shape[0])]), softmax_scale)
def test_numba_norm_axis_1(self, seed): np.random.seed(seed) x = np.random.normal(size=(10, 10)) np.testing.assert_allclose(np.linalg.norm(x, axis=1), norm(x, 1))