1

以下のセンサーから取得したデータマトリックスを参照してください。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 までのすべてのセンサーのセットです。たとえば、垂直方向の 1 番目の行を取り上げます。エントリは次のとおりです。

25  0   25  66  41  47  40  12  69  76  1

ルール

ルールは、アサート値を返す「仮定」関数であり、これまでのところ「真」または「偽」のみです。たとえば、センサーの A、E、F の値が 1 つのエントリで同じになることはないと思います。A=E=F のエントリがある場合、違反が発生し、このルール関数は 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

しかし問題は、私がここで定義したルールと範囲は、もっと深く見ると、すぐに非常に複雑になることです.それらには可能な組み合わせが多すぎます。 「C=E=F」、「C>F」……

そのため、後で正規表現文字列を使用しても、「A = E = F」などの「コアパラメーター」を入力パラメーターとして受け入れることができるルール/範囲ジェネレーターがすぐに必要になります。それは複雑すぎて私を打ち負かしただけです。そのままにしておくと、ルールの一意のID、データストレージの問題、ルールの自己ネストの組み合わせの問題を永続化する必要があるかもしれません......

だから私の質問は:

  1. この種の試行錯誤の計算または私が望むルールの定義に適合するモジュール/ソフトがあるかどうかは誰にもわかりますか?

  2. 私が説明したより良いルール/範囲の設計を誰でも共有できますか?

ヒントをありがとう。

Rg、

KC

4

2 に答える 2

1

あなたが正しく求めていることを理解していれば、あなたの説明が本当に必要であるとは思わないので、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

ここではいくつかの仮定 (ルールで使用されている唯一の演算子が等値であるなど) と省略された機能 (使用したlistofへの入力の解析など) がありdictますが、それを理解していただけることを願っています。自分で。

もちろん、これよりも単純な Numpy ベースのソリューションが存在する可能性がありますが、現時点では考えていません (もう遅いので、今から就寝します ;))。

編集:

おっと、何か他のものを見逃しました(投稿する前に追加するのを忘れていました)-(指定された範囲)の最初の要素のみをテストします.ハードコードされたインデックスを使用するのではなくl、別のループに貼り付けたいだけです.for0

于 2011-06-01T06:26:13.857 に答える
0

マトリックスなどのデータ構造について Numpy マトリックスを調べたいとします。これは、マトリックス操作で機能する関数のリストを公開します。

ルール/範囲ジェネレーターについては、それを実現するために独自のドメイン固有言語を構築する必要があると思います。

于 2011-06-01T05:44:25.203 に答える