mlinsights.mlmodel.direct_blas_lapack#

A simple try to call scipy blas and lapack function from cython.

Lapack#

mlinsights.mlmodel.direct_blas_lapack.dgelss(double[:, ::1] A, double[:, ::1] B, double prec=-1.)#

Finds X in the problem AX=B by minimizing \norm{AX - B}^2. Uses function dgels.

Parameters:
  • A – matrix with 2 dimensions

  • B – matrix with 2 dimensions

  • prec – precision

Returns:

integer (INFO)

INFO is:

  • = 0: successful exit

  • < 0: if INFO = -i, the i-th argument had an illegal value

  • > 0: if INFO = i, the i-th diagonal element of the triangular factor of A is zero, so that A does not have full rank; the least squares solution could not be computed.

Note

::1 indicates A, B, C must be contiguous arrays. Arrays A, B are modified by the function. B contains the solution.

Use lapack function dgelss

C minimizes the problem \norm{AX - B}^2.

<<<

import numpy
from scipy.linalg.lapack import dgelss as scipy_dgelss
from mlinsights.mlmodel.direct_blas_lapack import dgelss

A = numpy.array([[10.0, 1.0], [12.0, 1.0], [13.0, 1]])
B = numpy.array([[20.0, 22.0, 23.0]]).T
v, x, s, rank, work, info = scipy_dgelss(A, B)
print(x[:2])

A = A.T.copy()
info = dgelss(A, B)
assert info == 0
print(B[:2])

>>>

    [[ 1.]
     [10.]]
    [[ 1.]
     [10.]]