How to store " first_element " values?

1 visualización (últimos 30 días)
parag gupta
parag gupta el 21 de Feb. de 2020
Comentada: madhan ravi el 21 de Feb. de 2020
Could you please tell how to store the "first_element" values in a matrix?
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%code
first_element = [];
end_element = [];
A = [ 1 1 1 1 2 3 4 4 4 ; 1 2 3 4 5 5 5 5 5];
for this_row = A.'
V = this_row';
X = diff(V)~=0;
B = find([true,X]);
E = find([X,true]);
D = 1+E-B ;
first_element = D(1,1)
end_element = D(end);
end
%%%%%%%%%%%%%%%%%%%%
output of the following code is :
first_element =
4
first_element =
1
But I want output to be :
first_element = [ 4 ; 1]
%%%%%%%%%%%%%%%%%%%%%%%%%
Thanks

Respuesta aceptada

madhan ravi
madhan ravi el 21 de Feb. de 2020
A = [ 1 1 1 1 2 3 4 4 4 ; 1 2 3 4 5 5 5 5 5];
[first_element,end_element] = deal(zeros(size(A,1),1)); % preallocate
for k = 1:size(A,1)
V = A(k,:);
X = diff(V)~=0;
B = find([true,X]);
E = find([X,true]);
D = 1+E-B ;
first_element(k) = D(1,1);
end_element(k) = D(end);
end
  3 comentarios
parag gupta
parag gupta el 21 de Feb. de 2020
Thanks Madhan :)
madhan ravi
madhan ravi el 21 de Feb. de 2020
Thank you Stephen :) , you're solution of accumarray() indeed is impressive as always! It's been a while now since I am indulged with MATLAB so couldn't get my head around that function.

Iniciar sesión para comentar.

Más respuestas (1)

Stephen23
Stephen23 el 21 de Feb. de 2020
Editada: Stephen23 el 21 de Feb. de 2020
No loop needed, here using accumarray:
>> A = [1,1,1,1,2,3,4,4,4;1,2,3,4,5,5,5,5,5]
A =
1 1 1 1 2 3 4 4 4
1 2 3 4 5 5 5 5 5
>> D = diff(A(:,[1,1:end,end]),1,2)~=0;
>> D(:,[1,end]) = true;
>> [C,R] = find(D.');
>> first = accumarray(R,C,[],@(v)v(2)-v(1))
first =
4
1
>> last = accumarray(R,C,[],@(v)v(end)-v(end-1))
last =
3
5

Categorías

Más información sobre Loops and Conditional Statements 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!

Translated by