2

我目前正在尝试为一组观察自动生成一组模糊规则,其中每个观察包含四个值,其中每个观察将对应于一个状态(一个很好的例子是 Fisher 的虹膜数据)。

在 Matlab 中,我正在创建一个四维规则表,其中单个单元格 (a,b,c,d) 将包含相应的状态。为了减少表格,我遵循了行列相似性检查的Hong 和 Lee方法,但我很难理解如何处理第三维和第四维的行和列。从方法来看,我的理解是每个维度都是单独处理的,如果规则是真的,表格就会被简化。合并规则如下:

  1. 如果相邻列或行中的所有单元格都相同。
  2. 如果两个单元格相同,或者相邻
    列或行中的任何一个为空,并且两者中至少有一个单元格不为空。
  3. 如果一列或一行中的所有单元格都是空的,并且如果它的两个
    相邻列或行中的单元格相同,则合并三个。
  4. 如果一列或一行中的所有单元格都是空的,并且如果它的两个
    相邻列或行中的单元格相同或其中一个为空,则合并三个。
  5. 如果一列或一行中的所有单元格都是空的,并且如果
    其左侧的列或行中的所有非空单元格具有相同的区域,并且其右侧的列或行中的所有非空单元格具有相同的区域,但与前面提到的区域不同,将这三列合并为两部分。

现在是令人困惑的一点。简单地检查整个行/列是否与相邻的(规则 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.

对于第三维和第四维:

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.

甚至对四维数组的任何帮助都会很有用,因为我对超过三个的想法感到非常困惑!我建议您查看论文以理解我的意思-他们自己使用了 Iris 数据,但仅给出了 2D 表格的示例。

4

1 回答 1

1

I'm not sure if this is what you are asking, but here is how to check to see if the values in two rows are either the same as each other, or if not the same, that at least one is 0

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

if you want to be really clever, but somewhat cryptic,

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

for the first dimension

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

for the second, and so on

于 2010-06-02T00:59:23.917 回答