Python math: неподдерживаемые типы операндов для *: ‘NoneType’ и ‘float’

#python #typeerror

#python #ошибка типа

Вопрос:

У меня есть матрица в python, в которой я пытаюсь заполнить некоторые записи с помощью цикла for . Мой вектор $ X $ представляет собой пятимерный вектор с записями, заданными следующим образом:

введите описание изображения здесь

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

 import scipy as sp
import numpy as np
import math
from math import factorial

def nCr(n,r):
    if r<n:
        numerator=factorial(n)
        denominator=(factorial(r)*factorial(n-r))
        answer=numerator/denominator
        return answer
    if r>n:
        return 0

X1 = np.zeros((nt,NN,5))
for i in xrange(0,5):
    X1[0,:,i] = nCr(4,i)*((.0582**i)*(.125**(4-i)))/((.0582 .125)**4)
 

Однако я получаю сообщение об ошибке: TypeError: неподдерживаемые типы операндов для *: ‘NoneType’ и ‘float’

Я не уверен, какой другой способ существует для записи каждой векторной записи в приведенном выше выражении (я мог бы вычислить каждую запись явно, но я бы предпочел использовать цикл for просто для сокращения ручного вычисления, и это хорошее учебное упражнение).

Комментарии:

1. Ваша nCr функция вернет None , когда n == r .

2. Почему это так сложно, ошибка явно говорит сама за себя. если все еще возникают проблемы, попробуйте печатать значения на каждом шаге, прежде чем выполнять какие-либо арифметические действия.

3. @root Ах, хорошо, изменение r<n на r<=n, похоже, исправило это. Спасибо!

4. Изменение второго if на else также было бы хорошей идеей 😉

5. @Brenton … или запустите функцию с if r >= n: return 0 помощью, а затем вы можете выполнить реальный вычислительный код.