def update(self, x, y): x = self.phi(x) A_inv_dot_x = sclb.dsymv(1, self.A_inv.T, x) #A_inv_dot_x = np.dot(self.A_inv,x) sclb.dsyr(-1 / (1 + np.dot(x, A_inv_dot_x)), A_inv_dot_x, a=self.A_inv.T, overwrite_a=True) #self.A_inv -= np.outer(A_inv_dot_x, A_inv_dot_x) sclb.dsymv(-(np.dot(self.w, x) - y), self.A_inv.T, x, beta=1, y=self.w, overwrite_y=True)
def compute_ATA_blas_dsyr(N): ''' Compute only the lower or upper part of ATA by using the scipy wrraper for BLAS dsyr. ''' ATA = np.zeros((N, N)) for i in range(N): ai = compute_v(N) ATA = bla.dsyr(alpha=1, x=ai, lower=1, n=N, a=ATA, overwrite_a=1) return ATA
def DSYR_blas(A, x, alpha=1.): """ Performs a symmetric rank-1 update operation: A <- A + alpha * np.dot(x,x.T) :param A: Symmetric NxN np.array :param x: Nx1 np.array :param alpha: scalar """ A = blas.dsyr(lower=0, x=x, a=A, alpha=alpha, overwrite_a=True) symmetrify(A, upper=True)
def DSYR_blas(A, x, alpha=1.): """ Performs a symmetric rank-1 update operation: A <- A + alpha * np.dot(x,x.T) :param A: Symmetric NxN np.array :param x: Nx1 np.array :param alpha: scalar """ A = blas.dsyr(lower=0, x=x, a=A, alpha=alpha, overwrite_a=True) symmetrify(A, upper=True)
def DSYR_blas(A, x, alpha=1.): """ Performs a symmetric rank-1 update operation: A <- A + alpha * np.dot(x,x.T) :param A: Symmetric NxN np.array :param x: Nx1 np.array :param alpha: scalar """ At = blas.dsyr(lower=0, x=x, a=A, alpha=alpha, overwrite_a=False) #See https://github.com/scipy/scipy/issues/8155 A[:] = At symmetrify(A, upper=True)