matlab中的重叠特征值
如果我有一个矩阵matlab中的重叠特征值,matlab,Matlab,如果我有一个矩阵 F=[ 24 3 17 1; 28 31 19 1; 24 13 25 2; 47 43 39 1; 56 41 39 2]; 在前三列中,我有要素值,第四列是类标签。我的问题是,当特定值的类标签不同时,要去掉相同的特征值 与F矩阵一样,我必须删除第1、3、4和5行,因为对于第一列,第四列中有两个不同的值,对于第三列(39和39),类标签再次更改。 所以输出应该是 F=[28 31 19 1]; 简单的方法是迭代列,计算每个值的不同类的数量
F=[ 24 3 17 1;
28 31 19 1;
24 13 25 2;
47 43 39 1;
56 41 39 2];
在前三列中,我有要素值,第四列是类标签。我的问题是,当特定值的类标签不同时,要去掉相同的特征值
与F
矩阵一样,我必须删除第1、3、4和5行,因为对于第一列,第四列中有两个不同的值,对于第三列(39和39),类标签再次更改。
所以输出应该是
F=[28 31 19 1];
简单的方法是迭代列,计算每个值的不同类的数量,删除与多个类关联的值的行 例子 这导致:
F =
28 31 19 1
对这个问题的另一种看法,没有
arrayfun
(编辑)
将两个类别分开:
A1 = F(F(:,4)==1,1:3);
A2 = F(F(:,4)==2,1:3);
将它们复制到3D矩阵中,以比较类别1的每一行和类别2的每一行:
B2 = repmat(shiftdim(A2',-1),size(A1,1),1);
B1 = repmat(A1,[1,1,size(A2,1)]);
D4 = squeeze(sum(B1 == B2,2));
删除重复的行
A1(logical(sum(D4,2)),:) = [];
A2(logical(sum(D4,1)),:) = [];
重构原矩阵
R = [A1 ones(size(A1,1),1);A2 2*ones(size(A2,1),1)];
我曾尝试过matlab的ismember函数,但在检查二级时遇到问题。每个功能的效率定义为该功能可分离的所有剩余点的分数。我如何做到这一点。请帮助我???等待提示reply@saminaraz我不知道你的意思。你是在改变你现在的问题还是在问一个新问题?我的回答解决了你的问题吗?萨米娜·纳兹(samina naz)在他/她引用的话中评论道:“不,答案是gud……我很感激。但我在某个地方读到arrayfun有点慢。这就是为什么我想尝试使用其他逻辑的原因。”我在这里回答,现在我在等待,看看这是否真的是一个问题。一天没有回复,现在我觉得有点傻。我只是运行了你的代码,它有一个bug。您可以删除具有重复元素的任意两行,但您需要做的是仅当元素与其他类关联时才删除这些行(至少问题中是这样说的)。@DedekMraz我只是在您的帖子中…您说得对,我没有提到性能浪漫是个问题。。我刚刚写道,我在谷歌搜索arrayfun的时候在某个地方读过。干杯
A1(logical(sum(D4,2)),:) = [];
A2(logical(sum(D4,1)),:) = [];
R = [A1 ones(size(A1,1),1);A2 2*ones(size(A2,1),1)];