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

조회 수: 3 (최근 30일)
omidm
omidm 2022년 12월 9일
댓글: omidm 2022년 12월 9일
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
omidm
omidm 2022년 12월 9일
I'd like to ignore the leading and trailing zeros, so just the mean of [1 2] in your example. Thanks for clarifying.
Voss
Voss 2022년 12월 9일
편집: Voss 2022년 12월 9일
@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
Voss 2022년 12월 9일
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
  댓글 수: 1
omidm
omidm 2022년 12월 9일
This worked great, thank you. Indeed I did not want consecutive ones to have a value of zero between them. Thanks again!

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Eric Delgado
Eric Delgado 2022년 12월 9일
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
  댓글 수: 1
Voss
Voss 2022년 12월 9일
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.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 MATLAB에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by