#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
помощью, а затем вы можете выполнить реальный вычислительный код.