Я решаю кумулятивные функции вероятности (или уравнения в целом, если вы хотите думать об этом таким образом) с sympy solveset. Все идет нормально. Однако они возвращают «наборы» как тип вывода результатов. У меня проблемы с преобразованием или сохранением их как стандартных переменных типа python: в моем случае я бы хотел, чтобы это было число с плавающей точкой.
Мой код выглядит следующим образом:
import sympy as sp
from sympy import Symbol
from sympy import erf
from sympy import log
from sympy import sqrt
x = Symbol('x')
p = 0.1
sp.solveset((0.5 + 0.5*erf((log(x) - mu)/(sqrt(2)*sigma)))-p)
Out[91]:
FiniteSet(7335.64225447845*exp(-1.77553477605362*sqrt(2)))
Есть ли возможность преобразовать это в float? просто использование float()
не работает, так как я попробовал это, и я также дошел до того, что каким-то образом сохранил его как список, а затем снова извлек число. Однако этот способ кажется очень громоздким и не подходит для моей цели. В конце я скажу, решить это уравнение выше 1000 раз, и я хотел бы получить все результаты в виде аккуратного массива, содержащего числа с плавающей запятой.
Если вы сохраните приведенный выше результат следующим образом:
q = sp.solveset((0.5 + 0.5*erf((log(x) - mu)/(sqrt(2)*sigma)))-p)
, тогда Python говорит, что типом является sets.setsFiniteSet, и если вы попытаетесь получить доступ к переменной q, это выдаст вам ошибку ( работает в Spyder):
"Spyder не смог получить значение этой переменной из консоли - Сообщение об ошибке было:« У объекта кортежа нет атрибута «lift_error» ».
I понятия не имею, что это значит. Большое спасибо.