あなたのソリューションは、毎回forループを通してYY
のサイズを拡大し続けるので、特に遅くなります。
これを最適化するには、最初にstrjoin
を使用して文字列のセル配列を1つの長い文字列に変換します。その後、すぐにこの文字列全体にstr2num
を適用し、結果を再形成することができます。
YY = reshape(str2num(strjoin(ff)), [], numel(ff)).'
% 1 2 3 4 5
% 2 2 3 4 2
% 3 2 3 4 3
% 4 2 3 4 4
MATLABのバージョンがstrjoin
を持っていない場合、あなたは常にsprintf
YY = reshape(str2num(sprintf('%s ', ff{:})), [], numel(ff)).';
でそれを置き換えることができます別のオプションは、cellfun
とnum2str
を使用して数値にセル配列の各エントリに変換することですその結果を最初の次元に沿って連結します。
values = cellfun(@num2str, ff, 'UniformOutput', false);
YY = cat(1, values{:});
最初のオプションでは、一度だけnum2str
を呼び出し、strjoin
によって作成された一時的な文字列を格納するのに必要なメモリが数値と同じデータを格納するために必要なスペース未満であることを行っているので、約2倍高速でありますデータ型(double
)。