Интеграция приводит к TypeError: объект 'numpy.float64' не может быть интерпретирован как целое число - PullRequest
0 голосов
/ 05 октября 2018

Дорогие друзья! Я написал огромный код, после запуска Python отправляет сообщение об ошибке: Извините, если вопрос дилетантский.

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

Это 2 последних предложения ошибки.Python упомянул следующую часть моего кода по ошибке, поэтому я решил, что ошибка возникла отсюда:

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

Мне не удалось найти источник проблемы.

Для получения дополнительной информацииЯ поставил всю ошибку здесь:

 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

СПАСИБО ТАКОЕ.

1 Ответ

0 голосов
/ 05 октября 2018

cdm - это последовательность, а не число.Возможно, quad - это scipy.integrate.quad, который возвращает набор из 5 элементов, а не только целое число.* с последовательностью ожидает целое число, представляющее количество раз, чтобы повторить последовательность;например, у нас есть

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

Если quad равно scipy.integrate.quad, то интеграл является первым элементом кортежа, поэтому, если вы хотите получить интеграл, индексируйте его из результата:

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

Также в будущем ознакомьтесь с документацией по функциям, которые вы используете.

...