Error using for loop to delete empty cell array elements

I want to completely delete the null elements of routes_log cell array. I use the following code.
temp_routes_log=routes_log
for i=1:numel(temp_routes_log)
if (isempty(temp_routes_log{i})==1)
routes_log(i)=[]
end
end
%routes_log can be like {0×0 double} {1×3 double} and I want to
% completely remove the {0×0 double} and make routes_log as just {1×3 double}
But I get error in the case when (for e.g.) 5th entry is null in temp_routes_log but as I am deleting the routes_log elements, the routes_log is no more containing 5 elements and it throws an error at
routes_log(i)=[]
I also tried storing the indices i and then deleting those routes_log elements directly but I some other error was coming. Please guide on how can I achieve the deletion.

 채택된 답변

per isakson
per isakson 2021년 10월 31일
편집: per isakson 2021년 10월 31일
Replace
for i=1:numel(temp_routes_log)
by
for i = numel(temp_routes_log) : -1 : 1 % loop from last to first element
OR if routes_log is large and speed becomes an issue
to_be_deleted = false(1,numel(routes_log))
for i=1:numel(temp_routes_log)
if isempty(temp_routes_log{i})
to_be_deleted(i) = true;
end
end
routes_log(to_be_deleted) = [];
Caveat: not tested

댓글 수: 1

Jaya
Jaya 2021년 10월 31일
편집: Jaya 2021년 11월 15일
For now, routes_log is not so big. So, I used the first solution. Thanks.
Update: The second method works too! I later encountered large sized routes_log & revisited this solution to try the second way.

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

추가 답변 (0개)

카테고리

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

제품

질문:

2021년 10월 31일

편집:

2021년 11월 15일

Community Treasure Hunt

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

Start Hunting!

Translated by