Counting zeros which are lying between nonzero elements by considering consecutive zeros as a single element in a matrix
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
I have a (4x8) matrix as
A=[1 0 1 1 1 0 0 1;0 1 0 1 1 0 1 0;0 0 1 0 0 0 0 0;1 0 1 1 0 0 1 1]
I want to calculate the number of only those zeros that are lying between nonzero elements i.e 1 in each row in such a way that I want to consider only the consecutive zeros as a single element. Single zeros will be considered as a separate element. Desired Output is (2 2 0 2). How to do so?
0 commentaires
Réponses (5)
Mahdi Hayati
le 27 Août 2023
Hi.
you can use diff() function to find number of times that elements of each row, turn from 1 to 0. for example for the first row we can have:
D = diff(A(1,:));
temp = size(find(D == -1));
number_of_turns = temp(1);
if D(7) == -1
number_of_turns = number_of_turns - 1;
end
number_of_turns
in this code, I found how many times zeros are stuck between ones. The 'if' statement is because if the last element of the row is 0, it must not be count.
I hope it was useful
0 commentaires
Bruno Luong
le 27 Août 2023
Modifié(e) : Bruno Luong
le 27 Août 2023
A=[1 0 1 1 1 0 0 1;0 1 0 1 1 0 1 0;0 0 1 0 0 0 0 0;1 0 1 1 0 0 1 1]
d=diff(A~=0,1,2);
[~,i,v]=find(d');
vl=zeros(size(A,1),1);
vl(i)=v;
sum(d==-1,2)-(vl==-1)
0 commentaires
Bruno Luong
le 27 Août 2023
Always helpful the old for-loop
A=[1 0 1 1 1 0 0 1;0 1 0 1 1 0 1 0;0 0 1 0 0 0 0 0;1 0 1 1 0 0 1 1]
[m,n] = size(A);
count = zeros(m,1);
for i = 1:m
s0startded = false;
c = 0;
isprevnull = A(i,1) == 0;
for j = 2:n
isnull = A(i,j) == 0;
if s0startded
if ~isnull
c = c+1;
s0startded = false;
end
else
s0startded = isnull && ~isprevnull;
end
isprevnull = isnull;
end
count(i) = c;
end
count
0 commentaires
Matt J
le 27 Août 2023
Modifié(e) : Matt J
le 27 Août 2023
A=[1 0 1 1 1 0 0 1;0 1 0 1 1 0 1 0;0 0 1 0 0 0 0 0;1 0 1 1 0 0 1 1]
d=diff(A,1,2);
result= max(0, min( sum(d==-1,2) - ~A(:,end), sum(d==1,2) - ~A(:,1) ))
4 commentaires
Bruno Luong
le 27 Août 2023
Modifié(e) : Bruno Luong
le 27 Août 2023
It seems not correct with A contains only 0
A = [0 0 0 0]
d=diff(A,1,2);
result= min( sum(d==-1,2) - ~A(:,end), sum(d==1,2) - ~A(:,1) )
Bruno Luong
le 28 Août 2023
Modifié(e) : Bruno Luong
le 28 Août 2023
A=[1 0 1 1 1 0 0 1;0 1 0 1 1 0 1 0;0 0 1 0 0 0 0 0;1 0 1 1 0 0 1 1]
max(sum(diff(~~A,1,2)==1,2)-~A(:,1),0)
% If A is binary you can simplify to
% max(sum(diff(A,1,2)==1,2)-~A(:,1),0)
0 commentaires
Voir également
Catégories
En savoir plus sur Specifying Target for Graphics Output dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!