我目前正在尝试为一组观测值自动生成一组模糊规则,每个观测值包含四个值,每个观测值对应一个状态(一个很好的例子是Fisher's Iris Data)。 p>
在Matlab中我创建了一个四维规则表,其中单个单元格(a,b,c,d)将包含相应的状态。为了减少表格,我遵循行{列}相似性检查的Hong and Lee方法,但我很难理解如何处理第三维和第四维的行和列。根据该方法,我的理解是每个维度都是单独处理的,如果规则为真,则表格被简化。合并规则如下:
- 如果相邻列或行中的所有单元格都相同。
- 如果两个单元格相同或者相邻的单元格中任何一个单元格为空 列或行以及至少一个单元格 两者都不是空的。
- 如果列或行中的所有单元格都为空,并且如果单元格中的单元格为空 相邻的列或行是相同的, 合并这三个。
- 如果列或行中的所有单元格都为空,并且如果单元格中的单元格为空 相邻的列或行是相同的 或者其中任何一个都是空的,合并 这三个。
- 如果列或行中的所有单元格都为空,并且所有单元格都为空 列中的单元格或其左侧的行 有相同的地区,所有的 列或行中的非空单元格 在它右边有相同的区域, 但与以前有所不同 提到的地区,合并这三个 列分为两部分。
醇>
现在是令人困惑的一点。简单地检查整行/列是否与相邻(规则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表的例子。
答案 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
表示第二个,依此类推