Невозможно составить сумму нескольких операторов

Я пытаюсь создать симуляцию, содержащую суммирование с подходящим параметром m.

например, если я добавляю значение m = 1, я могу составить до 70 сумм, но если я добавляю m = 5, я могу составить только 19 сумм. и появляется эта ошибка.

TypeError: вывод ufunc 'add' (типовой код 'O') не может быть приведен к предоставленному выходному параметру (типовой код 'd') в соответствии с правилом приведения ''same_kind''

Мой код выглядит следующим образом

from scipy.special import factorial2

m = 5

theta = np.linspace(0, 1.5, 100)

def I(n):
    it = 0
    for t in range(n+1):
        it += ((2**t)*(m**t)*(np.cos(theta)**(2*t)))/factorial2(2*t+1)
    return it

Itheta= I(20)

Я попытался выяснить, связана ли ошибка с оператором факториала, но если вы удалите его из цикла, ошибка останется.

Что делает функция factorial2? Не могли бы вы обновить свой пост до MRE?

Tempman383838 12.05.2023 11:22

Я обнаружил, что это from scipy.special import factorial2. Чтобы исправить ошибку, замените it = 0 на it = np.zeros(100).

Tempman383838 12.05.2023 11:30

да factorial2 происходит из этой библиотеки. ну, я просто пытаюсь сделать, как вы сказали, подставив 't = 0', но не сработало

augusto 12.05.2023 12:19
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
3
59
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Была еще одна причуда с оператором +=. Будьте осторожны с этим. Вдогонку к моим комментариям:

from scipy.special import factorial2
import numpy as np

m = 5

theta = np.linspace(0, 1.5, 100)

def I(n):
    it = np.zeros(100)
    for t in range(n+1):
        it = it + ((2**t)*(m**t)*(np.cos(theta)**(2*t)))/factorial2(2*t+1)
    return it

Itheta = I(20)

print(Itheta)

ТИО

Интересное видео, я использую Python каждый день и никогда особо не задумывался +=.

Peter 12.05.2023 14:19

Ошибка больше не возникает следующим образом (т.е. не используйте it += ..).

def I(n):
    it = 0
    for t in range(n+1):
        it = it + ((2**t)*(m**t)*(np.cos(theta)**(2*t)))/factorial2(2*t+1)

    return it

Интересно, что it += .. не приводит к ошибке при использовании следующих шагов.

def I(n):
    it = 0
    for t in range(n+1):
        a = 2**t
        b = m**t
        c = np.cos(theta)**(2*t)
        d = factorial2(2*t+1)
        it += a*(b*c)/d

    return it

К сожалению, я не могу объяснить вам, почему это так.

Я просто вижу, что у @Tempman383838 может быть объяснение этому (хотя мне любопытно, почему тогда работает мой второй пример).

josch14 12.05.2023 13:21

Другие вопросы по теме