How to store " first_element " values?

1 Ansicht (letzte 30 Tage)
parag gupta
parag gupta am 21 Feb. 2020
Kommentiert: madhan ravi am 21 Feb. 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

Akzeptierte Antwort

madhan ravi
madhan ravi am 21 Feb. 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 Kommentare
parag gupta
parag gupta am 21 Feb. 2020
Thanks Madhan :)
madhan ravi
madhan ravi am 21 Feb. 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.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Stephen23
Stephen23 am 21 Feb. 2020
Bearbeitet: Stephen23 am 21 Feb. 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

Kategorien

Mehr zu Loops and Conditional Statements 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!

Translated by