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

 채택된 답변

madhan ravi
madhan ravi 2020년 2월 21일

1 개 추천

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

Stephen23
Stephen23 2020년 2월 21일
@madhan ravi: nice use of deal for the array preallocation.
parag gupta
parag gupta 2020년 2월 21일
Thanks Madhan :)
madhan ravi
madhan ravi 2020년 2월 21일
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.

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

추가 답변 (1개)

Stephen23
Stephen23 2020년 2월 21일
편집: Stephen23 2020년 2월 21일

2 개 추천

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

카테고리

도움말 센터File Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

질문:

2020년 2월 21일

댓글:

2020년 2월 21일

Community Treasure Hunt

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

Start Hunting!

Translated by