Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.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_Statistics - Fatal编程技术网

在matlab中的多列中查找多个重复值

在matlab中的多列中查找多个重复值,matlab,statistics,Matlab,Statistics,我已经尽了最大的努力来寻找答案 我有一个巨大的矩阵,a列是ID。B列和C列是某些值/分数 大概是这样的: A B C 876 0 1 159 2 3 887 0 1 876 1 2 597 1 3 159 2 3 所需: 我希望matlab自动检测A列中是否再次出现id。如果是,它应该查找B列和C列中的值,并查看它们是否匹配。如果有,输出应该告诉id、B列和C列中的2个值以及计数(事件) 上述示例的输出应为: A B C Count 159 2

我已经尽了最大的努力来寻找答案

我有一个巨大的矩阵,a列是ID。B列和C列是某些值/分数

大概是这样的:

A   B   C
876 0   1
159 2   3
887 0   1
876 1   2
597 1   3
159 2   3
所需: 我希望matlab自动检测A列中是否再次出现id。如果是,它应该查找B列和C列中的值,并查看它们是否匹配。如果有,输出应该告诉id、B列和C列中的2个值以及计数(事件)

上述示例的输出应为:

A   B   C   Count
159 2   3   2

需要帮忙吗

试试这个。我修改了第一行以提供更好的示例:

data = [ 876 1 2
         159 2 3
         887 0 1
         876 1 2
         597 1 3
         159 2 3 ];
[~, t, u] = unique(data, 'rows');
c = histc(u, 1:max(u));
ind = c>1;
result = [data(t(ind),:) c(ind)];
结果:

result =
   159     2     3     2
   876     1     2     2

使用accumarray的替代方法(我添加了测试数据)

要根据第4列对输出进行排序,请使用
排序
下降
选项,如下所示:

[~,Idx] = sort(Out(:,4),'descend')
Out = Out(Idx,:)

哎呀,矩阵不清楚。Mods可以有人编辑的例子和输出显示矩阵吗?谢谢!杰出的没问题,很乐意帮忙
accumarray
非常强大,哈哈!是否需要重新排列矩阵以首先显示较高的计数??请看我上面的评论1是什么?这是对其他内容的排序,而不是最后一列/计数。回答不错!我最初也想到了
accumarray
,但后来选择了
histc
Ok,还有一个问题让我的生活更轻松:如何重新排序结果以显示更高的计数。例如,如果159的计数为3,则它将在矩阵中列出高于876的值,即2?谢谢!要首先使用较高的计数进行排序:由于计数是第4行,请使用
sortrows(result,-4)
-
表示降序)
[~,Idx] = sort(Out(:,4),'descend')
Out = Out(Idx,:)