0

Dear Friends I have written a huge code, after running Python sends error: Sorry if the question is amateurish.

dacdm = 1/(z+1) * cdm
TypeError: 'numpy.float64' object cannot be interpreted as an integer

This is the 2 last sentences of the error. Python mentioned the following part of my code in error, so I decided that the error came from here:

def H_LCDM(z, H0, DM0):
        lcdm = 1/(H0 * sqrt(DM0 * (1 + z)**3 + (1 - DM0)))
        return lcdm

def DA_LCDM(z, DM0, H0):
         cdm = quad(H_LCDM, 0, z, args = (H0, DM0))
         dacdm = 1/(z+1) * cdm
         return dacdm


def fg(gg, DM0, H0, A, alpha, b, Omb):
        h = H0/100
        f_th = (0.824 /(1 + 0.19 * (h)**(1/2)))* (Omb/DM0) * (DA_LCDM(zgas[gg], H0, DM0)/DA(zgas[gg], DM0, H0, A, alpha, b))
        fgasth = ((fgas[gg] - f_th)/siggas[gg])**2
        return fgasth

def fgasmass(DM0, H0, A, alpha, b, Omb):
    h = H0/100
    num=0
    for gsgs in range(len(zgas)):
        num = num + fg(gsgs, DM0, H0, A, alpha, b, Omb)
        return num + ((Omb * h**2 - 0.0214)/0.002)**2 + ((h - 0.72)/0.08)**2

I could not manage to find the source of problem.

For more information, I put the whole error here:

 Traceback (most recent call last):
 File "C:\Users\esadr21\Desktop\Polytropic\Polytropic datasets.py", line 348, in <module>
 L = np.exp(-0.5 * (TOTAL(DM0n[i], H0n[i], An[i], alphan[i], bn[i], Mn[i], Ombn[i]) - TOTAL(DM0o[i-1], H0o[i-1], Ao[i-1], alphao[i-1], bo[i-1], Mo[i-1], Ombo[i-1])))    # L = exp(-( x^2 )/2)
  File "C:\Users\esadr21\Desktop\Polytropic\Polytropic datasets.py", line 328, in TOTAL
 total =  SN(DM0, H0, A, alpha, b, M) + BAO(DM0, H0, A, alpha, b, Omb) +  CMB(Omb, H0, DM0, A, alpha, b) + CC(DM0, H0, A, alpha, b) + SGL(DM0, H0, A,  alpha, b) + fgas(DM0, H0, A, alpha, b, Omb)
  File "C:\Users\esadr21\Desktop\Polytropic\Polytropic datasets.py", line 322, in fgas
num = num + fg(gsgs, DM0, H0, A, alpha, b, Omb)
 File "C:\Users\esadr21\Desktop\Polytropic\Polytropic datasets.py", line 315, in fg
f_th = (0.824 /(1 + 0.19 * sqrt(h)))* (Omb/DM0) * (DA_LCDM(zgas[gg], H0, DM0)/DA(zgas[gg], DM0, H0, A, alpha, b))
 File "C:\Users\esadr21\Desktop\Polytropic\Polytropic datasets.py", line 163, in DA_LCDM
dacdm = 1/(z+1) * cdm
TypeError: 'numpy.float64' object cannot be interpreted as an integer

THANK YOU SO MUCH.

1 Answer 1

1

cdm is a sequence, rather than a number. Perhaps quad is scipy.integrate.quad, which returns a tuple of up to 5 elements, not just an integral. * with a sequence expects an integer representing a number of times to repeat the sequence; for example, we have

>>> 3 * (1, 2, 3)
(1, 2, 3, 1, 2, 3, 1, 2, 3)

If quad is scipy.integrate.quad, then the integral is the first element of the tuple, so if you wanted the integral, index it out of the result:

#                                         vvv
cdm = quad(H_LCDM, 0, z, args = (H0, DM0))[0]

Also, in the future, read the docs for the functions you use.

Sign up to request clarification or add additional context in comments.

1 Comment

AHHHHH, thank you. I always use this, This time... silly mistake. Thank you so much. After writing 500 lines mathematical code, my eyes are blowing.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.