github.com/gonum/lapack@v0.0.0-20181123203213-e4cdc5a0bff9/native/iladlc.go (about)

     1  // Copyright ©2015 The gonum Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package native
     6  
     7  // Iladlc scans a matrix for its last non-zero column. Returns -1 if the matrix
     8  // is all zeros.
     9  //
    10  // Iladlc is an internal routine. It is exported for testing purposes.
    11  func (Implementation) Iladlc(m, n int, a []float64, lda int) int {
    12  	if n == 0 || m == 0 {
    13  		return n - 1
    14  	}
    15  	checkMatrix(m, n, a, lda)
    16  
    17  	// Test common case where corner is non-zero.
    18  	if a[n-1] != 0 || a[(m-1)*lda+(n-1)] != 0 {
    19  		return n - 1
    20  	}
    21  
    22  	// Scan each row tracking the highest column seen.
    23  	highest := -1
    24  	for i := 0; i < m; i++ {
    25  		for j := n - 1; j >= 0; j-- {
    26  			if a[i*lda+j] != 0 {
    27  				highest = max(highest, j)
    28  				break
    29  			}
    30  		}
    31  	}
    32  	return highest
    33  }