使用yield语句评估表达式

时间:2017-02-12 15:50:16

标签: python numpy sympy yield

我有一个包含度量Measurements(100, 0.3)的列表。

我将这些测量结果提供给Criteria类Criteria(999, [Measurements(100, 0.3), Measurements(33, 0.5)]),以便将一些标准应用于测量(method类中的Criteria函数)。

然后,我有一个列表(评估),其中包含上述所有内容(更正值),但可以运行Criteria列表。所以,我正在提供一个Criteria列表。

最后,我有一个General课程,我提供了Evaluate的列表。

代码是:

import numpy as np
import sympy
from sympy import symbols, sympify
from sympy.utilities.autowrap import ufuncify
from sympy.utilities.lambdify import lambdify

class Measurements():
    def __init__(self, value, other):
        self.value = value
        self.other = other


class Criteria():
    def __init__(self, new_value, measurements):
        self.new_value = new_value
        self.measurements = measurements

    def method(self):
        for measurement in self.measurements:
            if 20 < measurement.value < 110:
                measurement.value = self.new_value
        return self.measurements

class Evaluate():
    def __init__(self, name, criteria):
        self.name = name
        self.criteria = criteria

    def execute(self):
        for c in self.criteria:
            c.method()
            yield c.measurements

class General():
    def __init__(self, expression, evaluate):
        self.expression = expression
        self.evaluate = evaluate

    def proc(self):

        for element in self.evaluate:
            yield element.execute()





evaluate = [
    Evaluate('a',
             [
                 Criteria(999, [Measurements(100, 0.3), Measurements(33, 0.5)]),
                 Criteria(999, [Measurements(150, 0.3), Measurements(35, 0.5)])
             ]),

     Evaluate('b',
             [
                 Criteria(999, [Measurements(100, 0.3), Measurements(33, 0.5)]),
                 Criteria(999, [Measurements(150, 0.3), Measurements(35, 0.5)])
             ])
]

在这一点上代码一切正常(我可以找回正确的测量结果,即:

[Measurements(999, 0.3), Measurements(999, 0.5)],
[Measurements(150, 0.3), Measurements(999, 0.5)]

) 因此,Measurements value已更改为999,999,150,999。

现在我想做以下事情。

我希望能够获得Evaluate('a',..)的结果数组和Evaluate('b',...)的结果数组,将它们传递给General.proc()方法并评估一些表达式(例如a+b })。

我想区分“a”和“b”结果,因为表达式可能是a*8+ba+b*8

我知道在sympy部分,我必须做以下事情:

def proc(self):
    a, b = symbols("data_a data_b")
    expression = sympify(self.expression)

    for element in self.evaluate:
            yield element.execute()

    f = ufuncify((a, b), expression, backend='numpy')
    yield f(data_a, data_b)

但我不知道如何填充部分(正如我所说,我必须分别得到a和b的结果,因此在上面的代码中data_a将是a和{{1}的结果b。

的结果

0 个答案:

没有答案