Count the occurence certain elements based on condition in next column

Hello.
I have a matrix consists of A = [ 1 3 2 2 4 1 2 3 4 1 3] and B = [0 0 -3 0 2 1 4 0 0 -2 0]
How can I determine the occurence of element in A when corresponding value in B is not 0:
C = [
1 2
2 2
3 0
4 1]
Please help me..
Really appreciate it!!

 採用された回答

Bruno Luong
Bruno Luong 2020 年 11 月 4 日
U=unique(A(:));
[~,J]=ismember(A(B~=0),U);
n=accumarray(J(:),1,size(U));
C=[U,n]

その他の回答 (1 件)

Ameer Hamza
Ameer Hamza 2020 年 11 月 3 日
編集済み: Ameer Hamza 2020 年 11 月 3 日
Try this
A = [1 3 2 2 4 1 2 3 4 1 3];
B = [0 0 -3 0 2 1 4 0 0 -2 0];
C = [1:max(A); histcounts(A(B~=0), 'BinMethod', 'integers')].'

9 件のコメント

Daniar Fahmi
Daniar Fahmi 2020 年 11 月 4 日
Woww.. Thank you very much. Exactly what I need!!
Ameer Hamza
Ameer Hamza 2020 年 11 月 4 日
I am glad to be of help!!!
Daniar Fahmi
Daniar Fahmi 2020 年 11 月 4 日
編集済み: Daniar Fahmi 2020 年 11 月 4 日
Hi..
Is there any limitation for histcounts function? because when I used it in larger data (near 2 x 60M) and then it was found that unique element (vector A) was 360 data, the result of histcounts was only 300 data
Ameer Hamza
Ameer Hamza 2020 年 11 月 4 日
Can you share your data in a .mat file?
Daniar Fahmi
Daniar Fahmi 2020 年 11 月 4 日
here is my data
Ameer Hamza
Ameer Hamza 2020 年 11 月 4 日
Following solution will be more robust
A = dataPD(1,:);
B = dataPD(2,:);
C = [1:max(A); histcounts(A(B~=0), 0.5:1:max(A)+0.5)].'
Daniar Fahmi
Daniar Fahmi 2020 年 11 月 4 日
thanks.. It works!!!
Bruno Luong
Bruno Luong 2020 年 11 月 4 日
編集済み: Bruno Luong 2020 年 11 月 4 日
Attention A of your data contains 82335 0s and they are discarded from counting
Daniar Fahmi
Daniar Fahmi 2020 年 11 月 4 日
Yeah. I have just realised it..

サインインしてコメントする。

カテゴリ

ヘルプ センター および File ExchangeVariables についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by