从输入数据集

时间:2017-11-30 04:56:38

标签: algorithm search dataset data-science

我是处理大型数据集的新手,我遇到的问题是List-1中有表达式(如A = B + C的公式),表达式的变量可能有不同的可能值(C = D列表-2中的* 3,C = B / 2,B = D * 50等)。然后List-3具有变量的常量值(B,D等)。我需要计算表达式的所有可能结果(对于C的每个值,类似A可能有两个不同的结果)。 可能的组合可能是巨大的!

我打算按如下方式解决问题 - 1.对于List-1中的每个表达式,查找List-2和中每个变量的所有可能值 在List-4中生成所有可能的表达式。 List-4可能很大,可能是GB或TB!

  1. 从第一个生成的列表

  2. 为每个表达式创建一个树
  3. 在List-3

  4. 中查找每个变量值
  5. 在表达式中替换常量以获得结果。

  6. 第1步和第3步是需要大量内存和CPU的核心问题,任何指导都会受到高度赞赏。

    List1:表达式,例如 - A = x + y,y = u + v

    List2:包含List1中公式操作数的可能扩展   - 例如:v = 20 + u,v = 30 * u

    List3:常数值 - 例如:x = 10,u = 50

    A = x + y,y = u + 20 + u,x = 20,u = 10 => y = 40,A = 60 A = x + y,y = u + 30 * u,x = 20,u = 10 => y = 310,A = 330

2 个答案:

答案 0 :(得分:0)

您可能需要某种Expression类型,通常为AddMultiplyConstant等子类型,加上BoundVariable和{{ 1}}。

FreeVariable会有一个Expression的操作,并将其替换为BoundVariable的所有实例。

FreeVariable

然后,您可以循环浏览列表的笛卡尔积,并使用已计算的表达式输出标识符。

答案 1 :(得分:0)

假设您的语句是有效的Python语句,那么可以调整以下内容以提供您想要的输出。目前它只是打印变量及其最终值来计算:

from pprint import pprint as pp

# Organse the lists input as sets of simultaneous expressions:
expr_sets_list = ['A = x + y, y = u + 20 + u, x = 20, u = 10',
         'A = x + y, y = u + 30*u, x = 20, u = 10' ]

for expr_set_string in expr_sets_list:
    # Split into individual expressions on the comma separators
    exprs = [expr.strip() for expr in expr_set_string.split(',')]
    variables = {}  # Accumulates variables and their values
    for statement in reversed(exprs): # expressions WILL execute in reverse
        exec(statement, {},  variables)
    #
    print('\n%r =>' % expr_set_string)
    pp(variables)

输出:

'A = x + y, y = u + 20 + u, x = 20, u = 10' =>
{'A': 60, 'u': 10, 'x': 20, 'y': 40}

'A = x + y, y = u + 30*u, x = 20, u = 10' =>
{'A': 330, 'u': 10, 'x': 20, 'y': 310}