2011-02-01 12 views
11

以下に示すように、文字列のセル配列の行を水平に連結したいと考えています。文字列のセル配列を水平方向に連結します

start = {'hello','world','test';'join','me','please'} 

finish = {'helloworldtest';'joinmeplease'} 

上記の変換を行う組み込み関数はありますか?

答えて

1

簡単な方法は、行

nRows = size(start,1); 
finish = cell(nRows,1); 

for r = 1:nRows 
    finish{r} = [start{r,:}]; 
end 

EDIT

より複雑かつ(一般解はのための運動と同じままにされない解決策を読んで少し難しくオーバーすぎループです読者)

finish = accumarray([1 1 1 2 2 2]',[ 1 3 5 2 4 6]',[],@(x){[start{x}]}

+0

ありがとう、私はベクトル化でそれをやろうとしている最後の20分を費やしました - 私はMatlabで実際にループを使用した最後の時間を覚えていません:) –

+0

@Chris R:ご覧のようには、それを使用したくないかもしれませんが、accumarrayを使用して非ループソリューションです。とにかく、ループがあまりにも多くの関数呼び出しをしない場合は、新しいバージョンのMatlabでは通常はかなり高速です。 – Jonas

+2

@ChrisR:forループのようなことがなければ、 'finish = arrayfun(@(i)[start {i ,:}]、1:size(start、1)、 'UniformOutput '、false)'; ' – Amro

22

あなたがTHIを行うことができます簡単に非ループの方法があります

>> finish = num2cell(start,1); 
>> finish = strcat(finish{:}) 

finish = 

    'helloworldtest' 
    'joinmeplease' 
+0

+1ベクトルでnum2cellを呼び出すことができませんでした! – Jonas

+0

これは受け入れられる回答である必要があります。 –

-1

私はあなたがこれらの二つは、単一のセル配列として連結されていることであるたいと思う:機能NUM2CELLSTRCATを使用してね。このコードを試してみてください。

'x = [{開始}、{終了}];'

+0

例変数 'finish'は**出力**(最終結果)を意図していました。それは入力の一部ではないと考えられています。 – Hoki

+0

シンプルな 'X'を 'finish'で置き換えます –