¿Cómo puedo obtener las mismas soluciones 'especiales' para sistemas lineales subdeterminados que el operador 'A \ b' (mldivide) de Matlab devuelve usando numpy / scipy?

Encontre unenlazar donde se muestra con un ejemplo que el Matlabmldivide operador (\) da soluciones "especiales" cuando el sistema de ecuaciones lineales tiene infinitas soluciones.

Por ejemplo:

A = [1 2 0; 0 4 3];
b = [8; 18];
c_mldivide = A \ b
c_pinv = pinv(A) * b

da la salida:

c_mldivide =
                 0
                 4
  0.66666666666667


c_pinv =

  0.918032786885245
  3.54098360655738
  1.27868852459016

La solución es 'especial' en el sentido de que el número de entradas distintas de cero en la soluciónc_mldivide es igual arank(A) (en este caso 2). Intenté lo mismo en numpy usandonumpy.linalg.lstsq, que da un resultado idéntico ac_pinv.

¿Hay alguna manera de lograr elc_mldivide solución en Python?

Había otra pregunta muy similar.aquí, pero supongo que la explicación de la palabra "especial" no fue lo suficientemente clara.Otra pregunta preguntado sobre el funcionamiento interno de lamldivide operador, pero la respuesta aceptada no parece abordar este comportamiento.

Editar 1:numpy código

In [149]: test_A = np.array([[1,2,0],[0,4,3]])
          test_b = np.array([[8],[18]])
          np.linalg.lstsq(test_A,test_b)

Out[149]:
(array([[ 0.918 ],
    [ 3.541 ],
    [ 1.2787]]), array([], dtype=float64), 2, array([ 5.2732,  1.4811]))

Edición 2: Usandoscipy.optimize.nnls

In[189]:
from scipy.optimize import nnls
nnls(test_A,test_b)
Out[190]:
    ValueError                                Traceback (most recent call last)
<ipython-input-165-19ed603bd86c> in <module>()
      1 from scipy.optimize import nnls
      2 
----> 3 nnls(test_A,test_b)

C:\Users\abhishek\Anaconda\lib\site-packages\scipy\optimize\nnls.py in nnls(A, b)
     43         raise ValueError("expected matrix")
     44     if len(b.shape) != 1:
---> 45         raise ValueError("expected vector")
     46 
     47     m, n = A.shape

    ValueError: expected vector

Respuestas a la pregunta(2)

Su respuesta a la pregunta