title: Method for finding strictly greater-than-zero solution for Python's Scipy Linear Programing
body: <p><a href="http://docs.scipy.org/doc/scipy-0.16.0/reference/generated/scipy.optimize.nnls.html#scipy.optimize.nnls" rel="nofollow">Scipy NNLS</a> perform this:</p>
  
  <pre><code>Solve argmin_x || Ax - b ||_2 for x&gt;=0.
  </code></pre>
  
  <p>What's the alternative way to do it if I seek
  strictly non-zero solution (i.e. <code>x &gt; 0</code>) ?</p>
  
  <p>Here is my LP code using Scipy's NNLS:</p>
  
  <pre><code>import numpy as np
  from numpy import array
  from scipy.optimize import nnls
  
  def by_nnls(A=None, B=None):
      """ Linear programming by NNLS """
      #print "NOF row = ", A.shape[0]
      A = np.nan_to_num(A)
      B = np.nan_to_num(B)
  
      x, rnorm = nnls(A,B)
      x = x / x.sum()
      # print repr(x)
      return x
  
  B1 = array([  22.133,  197.087,   84.344,    1.466,    3.974,    0.435,
            8.291,   45.059,    5.755,    0.519,    0.   ,   30.272,
           24.92 ,   10.095])
  A1 = array([[   46.35,    80.58,    48.8 ,    80.31,   489.01,    40.98,
             29.98,    44.3 ,  5882.96],
         [ 2540.73,    49.53,    26.78,    30.49,    48.51,    20.88,
             19.92,    21.05,    19.39],
         [ 2540.73,    49.53,    26.78,    30.49,    48.51,    20.88,
             19.92,    21.05,    19.39],
         [   30.95,  1482.24,   100.48,    35.98,    35.1 ,    38.65,
             31.57,    87.38,    33.39],
         [   30.95,  1482.24,   100.48,    35.98,    35.1 ,    38.65,
             31.57,    87.38,    33.39],
         [   30.95,  1482.24,   100.48,    35.98,    35.1 ,    38.65,
             31.57,    87.38,    33.39],
         [   15.99,   223.27,   655.79,  1978.2 ,    18.21,    20.51,
             19.  ,    16.19,    15.91],
         [   15.99,   223.27,   655.79,  1978.2 ,    18.21,    20.51,
             19.  ,    16.19,    15.91],
         [   16.49,    20.56,    19.08,    18.65,  4568.97,    20.7 ,
             17.4 ,    17.62,    25.51],
         [   33.84,    26.58,    18.69,    40.88,    19.17,  5247.84,
             29.39,    25.55,    18.9 ],
         [   42.66,    83.59,    99.58,    52.11,    46.84,    64.93,
             43.8 ,  7610.12,    47.13],
         [   42.66,    83.59,    99.58,    52.11,    46.84,    64.93,
             43.8 ,  7610.12,    47.13],
         [   41.63,   204.32,  4170.37,    86.95,    49.92,    87.15,
             51.88,    45.38,    42.89],
         [   81.34,    60.16,   357.92,    43.48,    36.92,    39.13,
           1772.07,    68.43,    38.07]])
  </code></pre>
  
  <p>The usage:</p>
  
  <pre><code>In [9]: by_nnls(A=A1,B=B1)
  Out[9]:
  array([ 0.70089761,  0.        ,  0.06481495,  0.14325696,  0.01218972,
          0.        ,  0.02125942,  0.01906576,  0.03851557]
  </code></pre>
  
  <p>Note the zero solution above.</p>