簡體   English   中英

Matlab:2D單元陣列到char陣列

[英]Matlab: 2D cell array to char array

我想知道是否有一種很好的方法可以將2D單元陣列轉換為2D char矩陣。

單元格數組如下所示:

'test'    'me'    '0'     '22' 
'tester'  'me'    '14'    '241'
'test'    'you'   '25'    '1'  

現在,我想在各列之間放置空格,並使整個內容成為char數組。 意思是我想要這個:

'test me 0 22    '
'tester me 14 241'
'test you 25 1   '

或這個

'test   me  0   22'
'tester me  14 241'
'test   you 25   1'

你能幫我嗎? 我嘗試了char()但它並不關心單元格數組是2D的,只為單元格數組中的每個元素創建一行。

編輯:如果有人想找回串聯行的單元格數組,請看此單元格數組Matlab的合並列

非常感謝!

好吧, char使您進入其中的一部分,然后進行一些重塑等工作,其余的工作:

out = char(C');
out(:,end+1)=' ';
out = reshape(out',[28,3]);
out = out';

(其中可能有多余的空間)

但是,更好的方法可能是將內部字符串填充到單元格數組中,以便每一行的總長度相同,然后添加

f = @(x) [x,' '];
% need at least one space after each entry
C = cellfun(f,C,'UniformOutput',0); 
% now work out how much extra length needed
l = cellfun(@length,C);
l = sum(l,2);
l = max(l)-l;
% pad
for n = 1:length(l)
    C{n,end} = [C{n,end},blanks(l(n))];
end

現在我們需要的是:

cell2mat(C)

ans =

test me 0 22      
tester me 14 241  
test you 25 1   

我只能看到在匹配簡單循環指定的格式的同時如何做,如果格式不重要,可以使用char和reshape像nkjt那樣重整,那是我所能看到的最好的...

cellArray={ snip };

outp=[]

for ii=1:size(cellArray,2)
outp=[outp str2mat(cellArray(:,ii)) blanks(size(cellArray,1))'];
end

使用str2mat以列方式str2mat以將每列連接到一個(填充的)char數組中,添加一個尾隨空格,然后添加到輸出中。

結果:

outp =

test   me  0  22  
tester me  14 241 
test   you 25 1   

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM