How to count the number of consecutive identical elements (in both the directions) in a binary vector ?
40 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Debanjan
am 11 Feb. 2018
Bearbeitet: Jos (10584)
am 11 Feb. 2018
Suppose I have a binary vector
X = [0 0 0 0 1 1 1 0 1 1 1 1]
I want to characterize each element with the number of identical elements occurring in consecutive positions in both the directions. For instance, the desired output should look like:
Y = [4 4 4 4 3 3 3 1 4 4 4 4].
I found a similar thread, but it counts only in the forward direction. Thanks in advance for any sort of assistance.
1 Kommentar
Guillaume
am 11 Feb. 2018
I'm not sure I understand the concept of direction for identical consecutive elements. Identity is not directional.
Akzeptierte Antwort
Jan
am 11 Feb. 2018
Bearbeitet: Jan
am 11 Feb. 2018
X = [0 0 0 0 1 1 1 0 1 1 1 1];
[B, N] = RunLength(X);
Y = RunLength(N, N);
If you do not have a C-compiler for the fast C-Mex function, use RunLength_M.
Or with Matlab code:
d = [true, diff(X) ~= 0, true]; % TRUE if values change
n = diff(find(d)); % Number of repetitions
Y = repelem(n, n)
2 Kommentare
Jos (10584)
am 11 Feb. 2018
Bearbeitet: Jos (10584)
am 11 Feb. 2018
the use of repelem is clever indeed!
Weitere Antworten (2)
Jos (10584)
am 11 Feb. 2018
Bearbeitet: Jos (10584)
am 11 Feb. 2018
Something like this?
X = [0 0 0 0 1 1 1 0 1 1 1 1] % row vector!
numX = numel(X) ;
Q = find([false diff(X)≈0]) ;
I = zeros(1, numX) ;
I(Q) = 1 ;
I = cumsum(I) ;
N = diff([1 Q numX+1]) ;
result = N(I+1)
0 Kommentare
Image Analyst
am 11 Feb. 2018
Here's yet another way:
X = logical([0 0 0 0 1 1 1 0 1 1 1 1])
Y = zeros(1, length(X)); % Initialize output as the same size as X.
props = regionprops(X, 'Area', 'PixelIdxList');
for k = 1 : length(props)
Y(props(k).PixelIdxList) = props(k).Area;
end
props = regionprops(~X, 'Area', 'PixelIdxList');
for k = 1 : length(props)
Y(props(k).PixelIdxList) = props(k).Area;
end
0 Kommentare
Siehe auch
Kategorien
Mehr zu Creating and Concatenating Matrices finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!