Matlab 在列中计算重复的数字

Matlab 在列中计算重复的数字,matlab,Matlab,这是我的数据: 3 3 2 2 4 1 4 1 2 7 5 2 3 4 1 2 6 2 1 5 1 我想以某种方式返回我,1有3个副本,2有4个副本 我尝试了find(ismember(e(:,3),set)whereset=[1,2]和length(strfind(e(:,3),'1')),但它们不起作用……找不到其他任何东西 如果它能像那样把它还给我就更好了 ans = 3 1 4 2 使用unique和histc计算元素的出现次数:

这是我的数据:

3  3  2
2  4  1
4  1  2
7  5  2
3  4  1
2  6  2
1  5  1
我想以某种方式返回我,1有3个副本,2有4个副本

我尝试了
find(ismember(e(:,3),set)
where
set=[1,2]
length(strfind(e(:,3),'1'))
,但它们不起作用……找不到其他任何东西

如果它能像那样把它还给我就更好了

ans = 
      3 1
      4 2

使用
unique
histc
计算元素的出现次数:

[U, ia, iu] = unique(A(:, 3));   %// Vector of unique values and their indices
counts = histc(iu, 1:numel(U));  %// Count values
res = [counts(:), U];
例子 让我们将此应用于您的示例:

A = [3 3 2; 2 4 1; 4 1 2; 7 5 2; 3 4 2; 2 6 1; 1 5 1];
[U, ia, iu] = unique(A(:, 3));
counts = histc(iu, 1:numel(U));
res = [counts(:), U];
我们得到的是:

res =
     3     1
     4     2
编辑:


这里有更好的答案:

在这种情况下,最好使用
制表法

m = tabulate(a(:,3))

m =

1.0000    3.0000   42.8571
2.0000    4.0000   57.1429

[m(:,1), m(:,2)]

ans =

 1     3
 2     4 

为什么我们需要ia?它不做任何编辑:哦,好吧,我明白了+1:很好,我不知道
制表
,但值得注意的是,它需要安装统计工具箱…而且,你可以简单地编写
[m(:,1),m(:,2)]
m = tabulate(a(:,3))

m =

1.0000    3.0000   42.8571
2.0000    4.0000   57.1429

[m(:,1), m(:,2)]

ans =

 1     3
 2     4