1

A > 0 および B > 2 の次元 AxB の行列を含む 1xN 次元のセル配列があります。各行列の 2 番目と 3 番目の列を抽出し、これらの新しい行列を含む新しいセル配列を作成したいと考えています。

私はこれを行うことができることを知っています:

newcell = cell(size(oldcell));
for i = 1:size(oldcell,2)
    newcell{i} = oldcell{i}(:, [2, 3]);
endfor

しかし、さらにベクトル化することでループを回避できるかどうか疑問に思っていますか?

4

1 に答える 1

1

私はそれを考え出した。これは cellfun() で、オプション UniformOutput を false に設定して行うことができます (デフォルトは true)。

newcell = cellfun(@(x) x(:, [2, 3]), oldcell, 'UniformOutput', false);

これが UniformOutput=true で機能しない理由は、cellfun() が出力がスカラーであると想定しているからです。この場合はそうではありません。

于 2013-03-15T10:20:35.787 に答える