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)
whereset=[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