Отличный вопрос.В принципе это происходит потому, что Parameter
объекты являются подклассом sympy.Symbol
, а из его строки документации:
Symbols are identified by name and assumptions:
>>> from sympy import Symbol
>>> Symbol("x") == Symbol("x")
True
>>> Symbol("x", real=True) == Symbol("x", real=False)
False
Это является фундаментальным для внутренней работы sympy
, и, следовательно, что-то, что мы также используем вsymfit
.Но значение и фиксированные аргументы не рассматриваются как предположения, поэтому они не используются для различения параметров.
Теперь к вашему вопросу о том, как это повлияет на подгонку.Как вы говорите, последовательная работа - это хорошее решение, которое не будет иметь побочных эффектов:
model = sf.Model({y:a*x+b})
b.fixed = True
fit_results = []
for b_value, xdata, ydata in datastream:
b.value = b_value
fit = Fit(model, x=xdata, y=ydata)
fit_results.append(fit.execute())
Так что нет необходимости определять новый Parameter
каждую итерацию, атрибут b.value
будет одинаковым в каждом цикле, так что это не может пойти не так.Единственный способ, которым я могу представить, что это идет не так, если вы используете threading
, это, вероятно, создаст некоторые условия гонки.Но в любом случае threading
нежелателен для задач, связанных с процессором, multiprocessing
- это путь.И в этом случае будут порождаться отдельные процессы, создавая отдельные микрокосмы, поэтому здесь тоже не должно быть никаких проблем.
Надеюсь, это ответит на ваш вопрос, если не даст мне знать.
psЯ медленно отвечаю на свой путь до 1500, чтобы сделать этот тег, но если кто-то превзойдет меня, я, конечно же, буду счастливее;)