如何使用matlab计算列中相同的数值

时间:2015-02-21 17:18:29

标签: matlab count

所以这就是我的问题,我想计算一列中相同值的数量,这是我的数据:

a   b   d
2   1   5
1   3   10
1   -2  5
0   5   25
5   0   25
1   1   2
-1  -1  2

我想计算d的相同值(其中d = a ^ 2 + b ^ 2),所以这是我想要的输出:

a   b   d   count
2   1   5   2
1   3   10  1
0   5   25  2
1   1   2   2

所以你可以看到,只显示了a和b的正面组合。那我该怎么办呢?感谢。

2 个答案:

答案 0 :(得分:2)

假设您的输入数据存储在2D数组中,这可能是一种方法 -

%// Input
A =[
    2   1   5
    1   3   10
    1   -2  5
    0   5   25
    5   0   25
    1   1   2
    -1  -1  2]

[unqcol3,unqidx,allidx] = unique(A(:,3),'stable')
counts = sum(bsxfun(@eq,A(:,3),unqcol3.'),1)  %//'
out =[A(unqidx,:) counts(:)]

您还可以使用histc -

获取计数
counts = histc(allidx,1:max(allidx))

关于ab的正面组合的注意事项:如果您希望获得AB的正面组合,则可以仅选择满足此要求的A行并将其保存回A作为预处理步骤 -

A = A(all(A(:,1:2)>=0,2),:)

答案 1 :(得分:2)

假设您的数据是矩阵,这是一种基于accumarray的方法。请注意,这并未满足“只显示 a b 的正面组合”的要求。

M = [2   1   5
     1   3   10
     1   -2  5
     0   5   25
     5   0   25
     1   1   2
     -1  -1  2]; %// data
[~, jj, kk] = unique(M(:,3),'stable');
s = accumarray(kk,1);
result = [M(jj,:) s];