6

(n X 1) ベクトルのセル配列 と、 と呼ばれるへのAインデックスを含むベクトルのセル配列があるとします。のようなセル配列 を抽出したいと考えています。 言い換えれば、インデックスの配列のセル配列があり、これらのインデックスの配列のそれぞれによってインデックス付けされたベクトルの連結に対応する行列を引き出したいと考えています。 ABCC{i} = [A{B{i}}]
A

for i = 1:length(B)
    %# B{i} is an array of indices, C{i} is a matrix
    C{i} = [ A{ B{i} } ];
end

ループは次と同等です。

C = cellfun(@(x)[A{x}],B,'UniformOutput',false); %# implicit for loop w/ closure

インデックス式のみを使用してそれを行うことはできますか? または、少なくともループなしで?関与する必要があるかもしれない
と思いますが、それを理解することはできません。deal()

4

2 に答える 2

6

2 つの代替ソリューションを次に示します。

  • B関数 と一緒に のすべてのインデックスを収集し、cell2matの内容にインデックスを付けて 1 つの大きな行列を作成し、関数と のインデックス配列のサイズをA使用してその行列を分割します。mat2cellB

    N = size(A{1});                        % Size of an array in A
    M = cellfun('prodofsize', B);          % Array of sizes of elements in B
    C = mat2cell([A{cell2mat(B)}], N, M);
    
  • cellfunベースのソリューションのよりコンパクトなバージョンは次のとおりです。

    C = cellfun(@(x) {[A{x}]}, B);
    

最終的には、速度と可読性に基づいてどのソリューションを使用するかを決定します。これは、実際には for ループ ベースのソリューションになる可能性があります。

于 2011-03-18T14:49:49.267 に答える
0

次の式を試してください。

C = A(cell2mat(B))

セル配列とその内容に関する Loren のブログ投稿をご覧ください。

于 2011-03-18T09:10:44.623 に答える