Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
matlab中的重叠特征值_Matlab - Fatal编程技术网

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)];