It looks like your code is wrong, and numpy 1.12 happened to let you get
away with it

This line:

evals = evals[evals > tolerance]

Reduces the eigenvalues to only those which are greater than the tolerance

When you do U[:, evals > tolerance], evals > tolerance is just going
to be [True,
True, ...].

You need to swap the last two lines, to

U = U[:, evals > tolerance]
evals = evals[evals > tolerance]

Or better yet, introduce an intermediate variable:

keep = evals > tolerance
evals = evals[keep]
U = U[:, keep]

Eric
​

On Tue, 12 Feb 2019 at 15:16 Mauro Cavalcanti <mauro...@gmail.com> wrote:

> Dear ALL,
>
> I am trying to port an eigenalysis function that runs smoothly on Numpy
> 1.12 but fail miserably on Numpy 1.13 or higher with the dreadful error
> "boolean index did not match indexed array along dimension 1".
>
> Here is a fragment of the code, where the error occurrs:
>
>     evals, evecs = np.linalg.eig(Syy)
>     idx = evals.argsort()[::-1]
>     evals = np.real(evals[idx])
>     U = np.real(evecs[:, idx])
>     evals = evals[evals > tolerance]
>     U = U[:, evals > tolerance] # Here is where the error occurs
>
> So, I ask: is there a way out of this?
>
> Thanks in advance for any assistance you can provide.
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion@python.org
> https://mail.python.org/mailman/listinfo/numpy-discussion
>
_______________________________________________
NumPy-Discussion mailing list
NumPy-Discussion@python.org
https://mail.python.org/mailman/listinfo/numpy-discussion

Reply via email to