Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Why does np.array**3 lead to a different solution than (np.array/1)**3 in my code?

I wrote this code to calculate the integral in time of:
Q = (Q_max*(1 – (time/t_0 – 1)**2))
which I derived analytically.

import numpy as np
Q_max       = 400                   # W m-2
t_0         = 6*3600                # seconds
dt          = 60                    # seconds
time        = np.arange(0,2*t_0,dt) 
Q_integral_A = Q_max*((time)**2/(t_0) - (time)**3/(3*(t_0)**2))

However, I found that Q_integral_A gives the wrong solution. After trying a lot of stuff, I found out that doing the following leads to the right solution (dividing the second "time" by 1):

Q_integral_B = Q_max*((time)**2/(t_0) - (time/1)**3/(3*(t_0)**2))

What is happening here? Why is there a difference between Q_integral_A and Q_integral_B?

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

screenshot of output

Versions used:
Python 3.8.5
Numpy 1.20.3
Spyder 4.2.5

>Solution :

I looked into problem myself, and I get the same result. So at first time is a int32, but when you do time / 1 it becomes float64. It shouldn’t bring problems by itself, but time contains some big numbers, and raising them to 3rd power results in overflowing (here’s what i get), but it doesn’t effect float, because it works in different way.

To solve it just pass dtype="int64" time = np.arange(0, 2*t_0, dt, dtype = "int64"), but it won’t solve the problem for even larger numbers.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading