为python中的试错机制寻求更好的设计建议?

| 参见下面的从传感器获取的数据矩阵,仅是INT号,没有特别说明。
    A   B   C   D   E   F   G   H   I   J   K
1   25  0   25  66  41  47  40  12  69  76  1
2   17  23  73  97  99  39  84  26  0   44  45
3   34  15  55  4   77  2   96  92  22  18  71
4   85  4   71  99  66  42  28  41  27  39  75
5   65  27  28  95  82  56  23  44  97  42  38
…                                           
10  95  13  4   10  50  78  4   52  51  86  20
11  71  12  32  9   2   41  41  23  31  70  
12  54  31  68  78  55  19  56  99  67  34  94
13  47  68  79  66  10  23  67  42  16  11  96
14  25  12  88  45  71  87  53  21  96  34  41
水平A到K是传感器名称,垂直是通过计时器方式来自传感器的数据。 现在,我想用试错法分析那些数据,我定义了一些概念来解释我想要的东西: 来源 来源是我得到的所有原始数据 o进入 条目是所有A到K传感器的集合,例如垂直的第一行:
25  0   25  66  41  47  40  12  69  76  1
o规则 规则是具有断言值返回的\“ suppose \”函数,到目前为止,仅\“ true \”或\“ false \”。 例如,我假设传感器A,E和F的值永远不会相同,如果一项具有A = E = F的条目,将触发tigger违例,并且此规则函数将返回false。 橙子: 范围是用于选择垂直条目的功能,例如前5个条目 然后,基本思想是:
o   source + range = subsource(s)
o   subsource + rules = valiation(s)
最后我想得到一个列表可能看起来像这样:
rangeID ruleID violation
1   1   Y
2   1   N
3   1   Y
1   2   N
2   2   N
3   2   Y
1   3   N
2   3   Y
3   3   Y
但是问题是我在这里定义的规则和范围很快就会变得非常复杂,如果您看起来更深,它们的组合可能太多,以\“ A = E = F \”为例,可以定义\“ B = E = F \“,\” C = E = F \“,\” C> F \“ ...... 所以很快我需要一个规则/范围生成器,即使以后使用正则表达式字符串,它也可以接受诸如“ A = E = F \”之类的“核心参数”作为输入参数。那太复杂了,只是打败了我,别说我可能需要持久性规则唯一ID,数据存储问题,规则自嵌套组合问题...... 所以我的问题是: 有人知道我是否需要某种模块/软件来进行这种反复试验的计算或我想要的规则定义? 任何人都可以分享我所描述的更好的规则/范围设计? 感谢您的任何提示。 角色扮演, KC     
已邀请:
        如果我理解您的要求是正确的,我可能甚至不会冒险走在Numbpy的道路上,因为根据您的描述,我认为这确实是必需的。这是我可能如何解决您提出的特定问题的示例实现:
l = [\\
        {\'a\':25, \'b\':0, \'c\':25, \'d\':66, \'e\':41, \'f\':47, \'g\':40, \'h\':12, \'i\':69, \'j\':76, \'k\':1},\\
        {\'a\':25, \'b\':0, \'c\':25, \'d\':66, \'e\':41, \'f\':47, \'g\':40, \'h\':12, \'i\':69, \'j\':76, \'k\':1}\\
]
r = [\'a=g=i\', \'a=b\', \'a=c\']
res = []

# test all given rules
for n in range(0, len(r)):
        # i\'m assuming equality here - you\'d have to change this to accept other operators if needed
        c = r[n].split(\'=\')
        vals = []
        # build up a list of values given our current rule
        for e in c:
                vals.append(l[0][e])
        # using len(set(v)) gives us the number of distinct values
        res.append({\'rangeID\': 0, \'ruleID\':n, \'violation\':\'Y\' if len(set(vals)) == 1 else \'N\'})

print res
输出:
[{\'violation\': \'N\', \'ruleID\': 0, \'rangeID\': 0}, {\'violation\': \'N\', \'ruleID\': 1, \'rangeID\': 0}, {\'violation\': \'Y\', \'ruleID\': 2, \'rangeID\': 0}]
http://ideone.com/zbTZr 这里有一些假设(例如,相等性是规则中唯一使用的运算符)和一些功能(例如,将输入解析为我使用的ѭ7中的
list
),但我希望您能弄清楚自己解决。 当然,可能存在一个基于Numpy的解决方案,它比我现在暂时没有想到的解决方案简单(它已经很晚了,我现在要睡觉了;)),但是希望这可以帮助您。 编辑: 糟糕,错过了其他内容(忘记在发布前添加)-我只测试了
l
(给定范围)中的第一个元素。.您只想将其保留在另一个
for
循环中,而不是使用该硬编码为“ 10”索引。     
        您想查看Numpy矩阵中的数据结构(例如矩阵等)。它显示了可用于矩阵操作的函数列表。 至于规则/范围生成器,恐怕您必须构建自己的域特定语言才能实现。     

要回复问题请先登录注册