<p dir="auto">My issue is about <code class="notranslate">scipy.sparse.linalg.eigsh</code></p>
<h4 dir="auto">Reproducing code example:</h4>

<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="import numpy as np
from scipy import sparse as sp
from scipy.sparse.linalg import eigsh

np.random.seed(0)

A = sp.csr_matrix(np.random.rand(100,100) &gt; 0.5)
D = A.sum(-1).A1
D[D == 0] = 1
D = sp.diags(D ** (-1/2))
L = sp.eye(*A.shape) - D @ A @ D
eigsh(L, k=10, which='SM')[0]"><pre class="notranslate"><code class="notranslate">import numpy as np
from scipy import sparse as sp
from scipy.sparse.linalg import eigsh

np.random.seed(0)

A = sp.csr_matrix(np.random.rand(100,100) &gt; 0.5)
D = A.sum(-1).A1
D[D == 0] = 1
D = sp.diags(D ** (-1/2))
L = sp.eye(*A.shape) - D @ A @ D
eigsh(L, k=10, which='SM')[0]
</code></pre></div>
<p dir="auto">On my Mac I get different results each execution. E.g.<br>
<code class="notranslate">([-0.0065401 ,  0.80065443,  0.80663355,  0.81676304,  0.82418536, 0.82525194,  0.82584799,  0.82882288,  0.83281599,  0.8343768 ]</code><br>
The results also differ from my Linux machine:<br>
<code class="notranslate">[-0.01216965,  0.80576331,  0.81269594,  0.81530367,  0.82356752, 0.82470864,  0.82817419,  0.82923541,  0.82930345,  0.83027089]</code></p>
<p dir="auto">I assume this is caused by the use of a random starting vector via <code class="notranslate">ARPACK</code> (not via numpy). Setting <code class="notranslate">v0</code> manually, at least gives consistent results:<br>
e.g <code class="notranslate">eigsh(L, k=10, which='SM', v0=100*[0.1])[0]</code><br>
returns <code class="notranslate">[-0.00491898,  0.8024341 ,  0.81182509,  0.82095066,  0.82200956, 0.82278322,  0.82411053,  0.83036532,  0.83053034,  0.83250892]</code> on my Mac and Linux machine.</p>
<p dir="auto">Should we rather use bumpy (e.g. <code class="notranslate">randn</code>) for generating <code class="notranslate">v0</code>?  However, I don't know how many other methods might be affected. I am happy to submit a pull request, in case you agree and point me to further locations we should fix.</p>
<p dir="auto">There are numpy.linalg and scipy.linalg for good reasons (fortran and blas) but as a user including both is a pain. If scipy's version could include all numpy.linalg's function, then I could import scipy.linalg, being sure I don't have to read both manual to know if what I want to do can be done.</p>
<p dir="auto">To do that, if I am right, there are only 2 functions to include in scipy.linalg:</p>
<ul dir="auto">
<li>numpy.matrix_rank</li>
<li>numpy.cond</li>
</ul>
<p dir="auto">If you do that, you will help a lot a users and <a href="https://stackoverflow.com/questions/38168016/how-to-know-when-to-use-numpy-linalg-instead-of-scipy-linalg" rel="nofollow">such questions</a> will not happen anymore. In the same time the documentation could change <code class="notranslate">scipy.linalg imports most of them</code> by <code class="notranslate">all of them</code>!</p>