On 24/02/2021 20:36, Carla Molina wrote:
I found the following bug (python 3.9.1) when multiplying an array by
several variables without parentheses; look at the following example:
import numpy as np
NR = 0.25
N = 60461826
initialINCIDENCE = np.array([1, 50, 100, 150, 200, 250, 300])
initialINCIDENCE = initialINCIDENCE*N/(100000*7*NR)
print('First result ' +str(initialINCIDENCE))
initialINCIDENCE = np.array([1, 50, 100, 150, 200, 250, 300])
initialINCIDENCE = initialINCIDENCE*(N/(100000*7*NR))
print('Second result ' +str(initialINCIDENCE))
The result given is:
First result [ 345.49614857 -7267.86283429 10006.94459429 2739.08176
-4528.78107429 -11796.64390857 5478.16352 ]
Second result [ 345.49614857 17274.80742857 34549.61485714
51824.42228571 69099.22971429 86374.03714286 103648.84457143]
Clearly both are different, and in particular the first one has no sense to
me.
This is not a bug. Have a look at the array's dtype:
>>> n = 60461826
>>> a = np.array([1, 50, 100, 150, 200, 250, 300])
>>> a.dtype
dtype('int32')
A 32-bit integer cannot hold the result of, e. g. 50 * n, the result is
unhelpfully clipped.
One possible fix is to specify the array type:
>>> b = np.array([1, 50, 100, 150, 200, 250, 300], dtype=float)
>>> b * n
array([6.04618260e+07, 3.02309130e+09, 6.04618260e+09, 9.06927390e+09,
1.20923652e+10, 1.51154565e+10, 1.81385478e+10])
--
https://mail.python.org/mailman/listinfo/python-list