# How can I count the number of times a number appear in a vector?

635 views (last 30 days)

Show older comments

How can I count the number of times a number appear in a vector? A=[ 1 2 3 1 1 6 3 4 2 2 1 1 1 ]

1 appears 7 times 2 appears 3 times 3 appears 3 times and on ... Best Regards

##### 3 Comments

Walter Roberson
on 5 Apr 2019

### Accepted Answer

Rick Rosson
on 28 Jul 2011

Please try the following:

A = [ 1 2 3 1 1 6 3 4 2 2 1 1 1 ];

x = unique(A);

N = numel(x);

count = zeros(N,1);

for k = 1:N

count(k) = sum(A==x(k));

end

disp([ x(:) count ]);

HTH.

Rick

##### 6 Comments

Enrique Sánchez
on 26 Sep 2021

If A is not a vector, then I suggest

count(k) = sum(A == x(k), 'all');

### More Answers (6)

Alexander
on 4 Jun 2014

I realize this is old, but in case someone else stumbles upon it:

c = numel(find(a==1))

returns c = 7, so 1 occurs 7 times. Can embed into a for loop to find the occurrence of all members.

##### 1 Comment

Tejas k
on 8 Feb 2018

Walter Roberson
on 28 Jul 2011

u = unique(A);

fprintf('%d appears %d times\n', [u; histc(A,u)].');

##### 2 Comments

Walter Roberson
on 26 Sep 2015

[u, ~, uidx] = unique(A(:));

counts = accumarray(uidx, 1);

fprintf('%d appears %d times\n', [u, counts].');

Joseph Sottosanti
on 14 Dec 2018

c = nnz(a==1)

##### 1 Comment

Walter Roberson
on 14 Dec 2018

Steven Lord
on 5 Apr 2019

You can use histcounts or histogram for this purpose. Let's generate some sample data, 100 integers between 1 and 10.

A = randi(10, 1, 100);

The edges should start at each unique value in A. We need to add one additional edge at the end, otherwise the last bin will count the two largest unique values contained in A, not just the largest. All bins but the last contain their left edge but not their right edge, while the last bin contains both its edges.

U = unique(A);

edges = [U, max(U)+1];

Now let's count. I'll put the results in a table array for easy reading.

counts = histcounts(A, edges);

results = table(U(:), counts(:), 'VariableNames', {'UniqueElements', 'Count'})

If you want to see the results graphically, use histogram instead of histcounts.

h = histogram(A, edges);

counts2 = h.Values;

isequal(counts2, counts) % true

If you want the bins to be centered on integer values (useful if your data is all integer values, as in the case in the original question) you can specify the 'integers' BinMethod instead of building the edges yourself. If you do this with histcounts you'd want to call it with two outputs so you receive both the bin counts and the vector of bin edges. Remember that the vector of bin edges will be one element longer than the vector of bin counts since bin edges are fence posts and bin counts are fence rails.

h = histogram(A, 'BinMethod', 'integers');

[counts3, edges3] = histcounts(A, 'BinMethod', 'integers')

##### 0 Comments

indhu ravi
on 7 Apr 2019

sir for example i have an matrix of 3x3

0 0 0

1 0 1

1 1 1

i should get the maximum occurrence of each row (i.e) 0

1

1

can anyone help me

Zhe Li
on 27 May 2019

Edited: Zhe Li
on 27 May 2019

A simple command that should work in most situations:

>> summary(categorical(A))

gives

1 2 3 4 6

6 3 2 1 1

But this is for display (or quick overview) only -- you cannot use the result without some copying and pasting. So if you want an array of these values you need to use some of the other methods found here.

##### 0 Comments

### See Also

### Categories

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!