# Move empty cell in a row

조회 수: 3(최근 30일)
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

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

### 채택된 답변

Guillaume 11 May 2018
Another option, which may or may not be faster than Rik's (I haven't tested but I suspect it's faster since it doesn't do any sorting:
C = {1,2,3,4,5,[],[],[];
6,7,8,[],9,10,[],[];
11,12,13,[],[],[],14,15}
newC = C'; %tranpose since matlab works by column
newC = newC(~cellfun(@isempty, newC)); %remove all empty cells
newC = reshape(newC, [], size(C, 1))'
This assumes that there is the same number of empty cells in each row.
##### 댓글 수: 2표시숨기기 이전 댓글 수: 1
Lorenzo Lasagni 11 May 2018
They are both working well, but yes actually this is faster, thanks both.

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

### 추가 답변(1개)

Rik 11 May 2018
편집: Rik 11 May 2018
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표시숨기기 이전 댓글 수: 1
Rik 11 May 2018
My edit should work for you. If it doesn't, please let me know.

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

### Community Treasure Hunt

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

Start Hunting!

Translated by