0

这是我的数据:

3  3  2
2  4  1
4  1  2
7  5  2
3  4  1
2  6  2
1  5  1

我想以某种方式返回我有 3 个重复的 1 和 4 个重复的 2。

我试过find(ismember(e(:,3),set)在哪里set = [1, 2]length(strfind(e(:,3),'1'))但他们没有工作......找不到其他任何东西

如果它像那样返回我会更好

ans = 
      3 1
      4 2
4

3 回答 3

5

在这种情况下最好使用tabulate.

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 
于 2013-04-11T14:50:20.597 回答
5

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

[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
于 2013-04-11T14:00:21.303 回答
3
data = [3  3  2
        2  4  1
        4  1  2
        7  5  2
        3  4  1
        2  6  2
        1  5  1];

d = data(:,3); %extract relevant data
u = unique(d)'; %find unique list of numbers
D = repmat(d, 1, length(u)); 
s = sum(bsxfun(@eq, u, D)); %count occurences of each number in the unique list
ans = [s', u']

编辑:

在这里找到更好的答案:确定向量中每个唯一元素的出现次数

于 2013-04-11T14:05:55.983 回答