One explanation for this behavior is that doing otherwise would be slow.

Consider an array like

arr = np.array([1]*10**6 + [-1])
ret = np.log(arr)

Today, what happens is:

For what you describe to happen, the behavior would have to be either:

or:

In either case, you’ve converted a 1-pass iteration to a 2-pass one.

There are static-typing-based explanations for this behavior too, but I’ll let someone else present one of those.

Eric


On Mon, 25 May 2020 at 14:33, Brian Racey <raceybe@gmail.com> wrote:
Why does numpy produce a runtime warning (invalid value encountered in log) when taking the log of a negative number? I noticed that if you coerce the argument to complex by adding 0j to the negative number, the expected result is produced (i.e. ln(-1) = pi*i).

I was surprised I couldn't find a discussion on this, as I would have expected others to have come across this before. Packages like Matlab handle negative numbers automatically by doing the complex conversion.
_______________________________________________
NumPy-Discussion mailing list
NumPy-Discussion@python.org
https://mail.python.org/mailman/listinfo/numpy-discussion