Move empty cell in a row
古いコメントを表示
Hello, I've a cell array structured like this:
{1,2,3,4,5,[],[],[];
6,7,8,[],9,10,[],[];
11,12,13,[],[],[],14,15}
I would like to move the empty cell at the end of the row to eliminate the column after and have only 5 columns and no more 8. How can I do?
Thanks a lot, Lorenzo
採用された回答
その他の回答 (1 件)
Does cell2mat work for you? I you want to keep it as a cell, you can also follow it up with num2cell.
A={1,2,3,4,5,[],[],[];
6,7,8,[],9,10,[],[];
11,12,13,[],[],[],14,15};
B1=cell2mat(A);
B2=num2cell(cell2mat(A));
In cases where each non-empty cell contains arrays, or different data types, the code below can be used, although there might be a more elegant/faster method.
A={1,2,3,4,5,[],[],[];
6,7,8,[],9,10,[],[];
11,12,13,[],[],[],14,15};
for row=1:size(A,1)
temp=A(row,:);
bin=cellfun('isempty',temp);%much faster than @isempty
[~,order]=sort(bin);%sort the empty cells to the back
A(row,:)=A(row,order);%might be a few ms faster than A(row,:)=temp(order);
end
%remove all completely empty columns
A(:,all(cellfun('isempty',A),1))=[];
2 件のコメント
Lorenzo Lasagni
2018 年 5 月 11 日
Rik
2018 年 5 月 11 日
My edit should work for you. If it doesn't, please let me know.
カテゴリ
ヘルプ センター および File Exchange で Shifting and Sorting Matrices についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!