If i have a binary matrix (NxM)
A =[0 0 1 0 1 0 1 0 1 0 1 0 1 0 0 1
0 1 1 0 1 1 1 1 1 1 1 1 0 1 0 1
1 1 0 1 0 0 0 0 0 0 0 1 1 1 1 1
0 1 0 1 1 1 0 0 0 0 0 1 1 1 1 1
0 1 1 1 1 0 1 0 0 1 1 1 1 1 0 1
0 0 1 1 0 1 1 0 1 1 1 0 1 0 0 1
0 1 0 0 1 0 1 1 1 1 0 1 1 1 0 1
0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 1];
I need a function to calculate number of 1 and in each row and put it in a new matrix like this
B = [ 1 1 1 1 1 1 1
2 8 1 1
2 1 5
1 3 5
4 1 5 1
2 2 3 1 1
1 1 4 3 1
13
15
5 1 ]
And a third matrix for a column like this
C = [ 1 4 2 4 2 1 2 1 2 1 2 4 1 4 2 7
1 3 2 2 2 1 6 4 5 6 2 3 7 3 1 2
2 3 1 2
3 ]
  • Note when the counter see zero then the counter will be stop and start again for example [0 1 1 0 1 1 1 1 1 ] then the solution will be [2 5]

 Akzeptierte Antwort

Azzi Abdelmalek
Azzi Abdelmalek am 1 Apr. 2016

0 Stimmen

A =[0 0 1 0 1 0 1 0 1 0 1 0 1 0 0 1
0 1 1 0 1 1 1 1 1 1 1 1 0 1 0 1
1 1 0 1 0 0 0 0 0 0 0 1 1 1 1 1
0 1 0 1 1 1 0 0 0 0 0 1 1 1 1 1
0 1 1 1 1 0 1 0 0 1 1 1 1 1 0 1
0 0 1 1 0 1 1 0 1 1 1 0 1 0 0 1
0 1 0 0 1 0 1 1 1 1 0 1 1 1 0 1
0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 1]
[n,m]=size(A);
B=(m+repmat(1:m,n,1)-A.*cumsum(A,2)).*A;
for k=1:n
a=B(k,B(k,:)~=0);
[~,~,kk]=unique(a);
row1{k,1}=accumarray(kk,1);
end
celldisp(row1)

4 Kommentare

For the column, you can use the same code, just transpose your matrix
C=(n+repmat(1:n,m,1)-A'.*cumsum(A',2)).*A'
for k=1:m
a=C(k,C(k,:)~=0);
[~,~,kk]=unique(a);
col1{k,1}=accumarray(kk,1);
end
celldisp(col1)
Firas Al-Kharabsheh
Firas Al-Kharabsheh am 1 Apr. 2016
can you give me your email ???
Firas Al-Kharabsheh
Firas Al-Kharabsheh am 1 Apr. 2016
Thank you

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu MATLAB finden Sie in Hilfe-Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by