How to count the number of consecutive identical elements (in both the directions) in a binary vector ?
105 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Debanjan
el 11 de Feb. de 2018
Editada: Jos (10584)
el 11 de Feb. de 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 comentario
Guillaume
el 11 de Feb. de 2018
I'm not sure I understand the concept of direction for identical consecutive elements. Identity is not directional.
Respuesta aceptada
Jan
el 11 de Feb. de 2018
Editada: Jan
el 11 de Feb. de 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 comentarios
Jos (10584)
el 11 de Feb. de 2018
Editada: Jos (10584)
el 11 de Feb. de 2018
the use of repelem is clever indeed!
Más respuestas (2)
Jos (10584)
el 11 de Feb. de 2018
Editada: Jos (10584)
el 11 de Feb. de 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 comentarios
Image Analyst
el 11 de Feb. de 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 comentarios
Ver también
Categorías
Más información sobre Startup and Shutdown en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!