nobel
nobel

Reputation: 51

How to count same values of number in column using matlab

So here's my problem i want to count the numbers of same values in a column, this my data:

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

i want to count the same values of d (where d = a^2 + b^2), so this is the output i want:

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

so as you can see, only positive combinations of a and b displayed. so how can i do that? thanks.

Upvotes: 2

Views: 146

Answers (2)

Divakar
Divakar

Reputation: 221524

Assuming your input data to be stored in a 2D array, this could be one approach -

%// 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(:)]

You can also get the counts with histc -

counts = histc(allidx,1:max(allidx))

Note on positive combinations of a and b: If you are looking to have positive combinations of A and B, you can select only those rows from A that fulfill this requirement and save back into A as a pre-processing step -

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

Upvotes: 2

Luis Mendo
Luis Mendo

Reputation: 112659

Assuming your data is a matrix, here's an accumarray-based approach. Note this doesn't address the requirement "only positive combinations of a and b displayed".

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];

Upvotes: 2

Related Questions