以下に示すように、文字列のセル配列の行を水平に連結したいと考えています。文字列のセル配列を水平方向に連結します
start = {'hello','world','test';'join','me','please'}
finish = {'helloworldtest';'joinmeplease'}
上記の変換を行う組み込み関数はありますか?
以下に示すように、文字列のセル配列の行を水平に連結したいと考えています。文字列のセル配列を水平方向に連結します
start = {'hello','world','test';'join','me','please'}
finish = {'helloworldtest';'joinmeplease'}
上記の変換を行う組み込み関数はありますか?
簡単な方法は、行
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}]}
)
あなたがTHIを行うことができます簡単に非ループの方法があります
>> finish = num2cell(start,1);
>> finish = strcat(finish{:})
finish =
'helloworldtest'
'joinmeplease'
+1ベクトルでnum2cellを呼び出すことができませんでした! – Jonas
これは受け入れられる回答である必要があります。 –
ありがとう、私はベクトル化でそれをやろうとしている最後の20分を費やしました - 私はMatlabで実際にループを使用した最後の時間を覚えていません:) –
@Chris R:ご覧のようには、それを使用したくないかもしれませんが、accumarrayを使用して非ループソリューションです。とにかく、ループがあまりにも多くの関数呼び出しをしない場合は、新しいバージョンのMatlabでは通常はかなり高速です。 – Jonas
@ChrisR:forループのようなことがなければ、 'finish = arrayfun(@(i)[start {i ,:}]、1:size(start、1)、 'UniformOutput '、false)'; ' – Amro