From fb9cea3a5df31bb32c758155fab987c8d0b04284 Mon Sep 17 00:00:00 2001 From: Lars Buitinck Date: Tue, 6 Oct 2015 21:47:04 +0200 Subject: [PATCH] ENH: optimize: no more bounds checking in Givens elim --- scipy/optimize/_lsq/givens_elimination.pyx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/scipy/optimize/_lsq/givens_elimination.pyx b/scipy/optimize/_lsq/givens_elimination.pyx index c48c6d46d3e8..ddc41ac6e846 100644 --- a/scipy/optimize/_lsq/givens_elimination.pyx +++ b/scipy/optimize/_lsq/givens_elimination.pyx @@ -1,9 +1,12 @@ +cimport cython from scipy.linalg.cython_lapack cimport dlartg from scipy.linalg.cython_blas cimport drot import numpy as np +@cython.boundscheck(False) +@cython.wraparound(False) def givens_elimination(double [:, ::1] S, double [:] v, double [:] diag): """Zero out a diagonal block of a matrix by series of Givens rotations. @@ -28,7 +31,7 @@ def givens_elimination(double [:, ::1] S, double [:] v, double [:] diag): such that on exit it contains the first n components of the above mentioned vector after rotations were applied. """ - cdef int n = diag.size + cdef int n = diag.shape[0] cdef int k cdef int i, j @@ -44,7 +47,7 @@ def givens_elimination(double [:, ::1] S, double [:] v, double [:] diag): if diag[i] == 0: continue - diag_row[:] = 0 + diag_row[i+1:] = 0 diag_row[i] = diag[i] u = 0