2

私は現在、観測ごとに 4 つの値を含む一連の観測に対して一連のファジー ルールを自動的に生成しようとしています。各観測は状態に対応します (良い例はフィッシャーのアイリス データです)。

Matlab では、単一のセル (a、b、c、d) に対応する状態が含まれる 4 次元ルール テーブルを作成しています。表を縮小するために、行と列の類似性チェックのHong と Leeの方法に従っていますが、3 番目と 4 番目の次元の行と列に対処する方法を理解するのが困難です。この方法から、各次元が個別に扱われ、ルールが真の場合、テーブルが単純化されていることが理解できます。マージのルールは次のとおりです。

  1. 隣接する列または行のすべてのセルが同じ場合。
  2. 2 つのセルが同じ場合、または隣接する
    列または行でいずれかが空で、両方のセルの少なくとも 1 つが空でない場合。
  3. 列または行のすべてのセルが空で、
    隣接する 2 つの列または行のセルが同じ場合、3 つを結合します。
  4. 列または行のすべてのセルが空で、
    隣接する 2 つの列または行のセルが同じであるか、いずれかが空の場合、3 つを結合します。
  5. 列または行のすべてのセルが空で、
    その左側の列または行のすべての空でないセルが同じ領域を持ち、その右側の列または行のすべての空でないセルが同じ領域を持つ場合、ただし前述のリージョンとは 1 つ異なりますが、これら 3 つの列を 2 つの部分にマージします。

紛らわしいビットのために今。行/列全体が隣接するものと同じかどうかを確認するだけ (ルール 1) は、十分に単純に思えます。

if (a,:,:,:) == (a+1,:,:,:)
   (:,b,:,:) == (:,b+1,:,:)
   (:,:,c,:) == (:,:,c+1,:)
   (:,:,:,d) == (:,:,:,d+1)

これは正しいです?

しかし、行/列の要素が一致するかどうか、またはどちらかがゼロであるかどうか (ルール 2 および 4) を確認するには、少し迷っています。それはこれらの線に沿ったものでしょうか:

for a = 1:20
    for i = 1:length(b)
        if (a+1,i,:,:) == (a,i,:,:)
        ...
        else if (a+1,i,:,:) == 0
        ...
        else if (a,i,:,:) == 0      etc.

3 番目と 4 番目の次元については、次のようになります。

for c = 1:20
    for i = 1:length(a)
        if (i,:,c,:) == (i,:,c+1,:)
        ...
        else if (i,:,c+1,:) == 0
        ...
        else if (i,:,c,:) == 0      etc.

for d = 1:20
    for i = 1:length(a)
        if (i,:,:,d) == (i,:,:,d+1)
        ...
        else if (i,:,:,d+1) == 0
        ...
        else if (i,:,:,d) == 0      etc.

私は3つ以上の考えにとても混乱しているので、4次元配列の助けさえあれば役に立ちます! 私の意味を理解するために論文を読むことをお勧めします.彼ら自身は虹彩データを使用していますが、2Dテーブルの例しか示していません.

4

1 に答える 1

1

これがあなたの求めているものかどうかはわかりませんが、2 つの行の値が互いに同じかどうか、または同じでない場合は少なくとも 1 つが 0 であるかどうかを確認する方法を次に示します。

table(a,:,:,:) == table(a+1,:,:,:) | table(a,:,:,:) == 0 | table(a+1,:,:,:) = 0;

本当に賢く、でもやや不可解になりたい場合は、

(diff(table, [], 1) == 0) | table(1:(end-1),:,:,:) == 0 | table(2:end, :,:,:) == 0

最初の次元

(diff(table, [], 2) == 0) | table(:,1:(end-1),:,:) == 0 | table(:,2:end, :,:) == 0

2番目など

于 2010-06-02T00:59:23.917 に答える