# How can I quantify the number of cells between specific values?

2 views (last 30 days)
omidm on 9 Dec 2022
Commented: omidm on 9 Dec 2022
I have a 100x1500 array [A] filled with zeros and ones.
For example, A(1,:) = 0 0 0 0 0 0 1 0 0 0 1 0 1 0 1 0 0 0 1....
For each row, I would like to find the average distance, or average number of zeros, between ones. Is there a simple way to do this?
##### 3 CommentsShow 1 older commentHide 1 older comment
omidm on 9 Dec 2022
I'd like to ignore the leading and trailing zeros, so just the mean of [1 2] in your example. Thanks for clarifying.
Voss on 9 Dec 2022
Edited: Voss on 9 Dec 2022
@omidm: How should consecutive ones be treated? That is, should they be considered as having a run of zero zeros in between them? Consider:
A = [1 0 1 1 0 0 0 1]
Is that a sequence of 1 zero followed by a sequence of 3 zeros (average length 2), or is it a sequence of 1 zero followed by a sequence of 0 zeros followed by a sequence of 3 zeros (average length 4/3)?

Voss on 9 Dec 2022
A = [0 0 1 0 0 0 0 1 1 0
1 0 1 0 0 0 1 1 0 0
0 1 1 1 0 0 1 0 1 0
1 0 0 0 1 1 1 0 1 0
1 1 1 0 1 0 0 0 0 1
1 0 0 1 1 1 1 1 1 0
0 0 1 0 1 0 0 0 0 0
1 1 1 1 0 1 0 1 0 1
0 0 0 0 1 1 0 1 0 1
0 1 0 1 0 1 1 1 1 0];
[r,c] = find(A);
groupsummary(c,r,@mean_diff)
ans = 10×1
4.0000 2.0000 1.5000 2.0000 2.5000 2.0000 1.0000 1.0000 1.0000 1.0000
function out = mean_diff(x)
m = diff(x)-1;
out = mean(m(m > 0));
end
omidm on 9 Dec 2022
This worked great, thank you. Indeed I did not want consecutive ones to have a value of zero between them. Thanks again!

Eric Delgado on 9 Dec 2022
I don't know if my solution is the "simple way" that you request! :)
randomMatrix = randi([0,1],10)
randomMatrix = 10×10
0 0 1 0 0 0 0 1 1 0 1 0 1 0 0 0 1 1 0 0 0 1 1 1 0 0 1 0 1 0 1 0 0 0 1 1 1 0 1 0 1 1 1 0 1 0 0 0 0 1 1 0 0 1 1 1 1 1 1 0 0 0 1 0 1 0 0 0 0 0 1 1 1 1 0 1 0 1 0 1 0 0 0 0 1 1 0 1 0 1 0 1 0 1 0 1 1 1 1 0
meanZeros = zeros(height(randomMatrix), 1);
for ii = 1:height(randomMatrix)
meanZeros(ii) = mean(diff(find(randomMatrix(ii,:) == 1))-1);
end
meanZeros
meanZeros = 10×1
2.0000 1.3333 0.7500 1.0000 1.2500 0.3333 1.0000 0.5000 0.6667 0.4000
Voss on 9 Dec 2022
Note that this method treats consecutive 1's as containing zero 0's in between them, e.g., for the first row of A above, this method gives the average number of zeros as 2 = (4+0)/2 rather than 4 = 4/1.
It's not clear whether this is what OP intends.

### Categories

Find more on Logical in Help Center and File Exchange

### Community Treasure Hunt

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

Start Hunting!