在Matlab中简化四维规则表:寻址每个维度的行和列

时间:2010-06-01 12:20:33

标签: matlab rule fuzzy 4d

我目前正在尝试为一组观测值自动生成一组模糊规则,每个观测值包含四个值,每个观测值对应一个状态(一个很好的例子是Fisher's Iris Data)。 p>

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

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

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

1 个答案:

答案 0 :(得分: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

表示第二个,依此类推