2011-03-18 167 views
6

某些標題,是吧?假設我有一個(n×1)個矢量的單元陣列,A,以及一個包含索引的矢量單元陣列,其中A被稱爲B。我希望提取一個單元陣列,C,例如C{i} = [A{B{i}}]
換句話說,我有索引的陣列的單元陣列,和欲拔出對應於由每個指標的這些陣列的索引在A矢量的級聯矩陣。MATLAB:索引一個單元陣列與單元陣列並返回一個單元陣列

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()可能不得不涉及,但無法弄清楚。

回答

6

這裏有兩個備選方案:

  • 收集的B各項指標連同功能cell2mat,將A的內容索引爲一個大矩陣,然後將該墊子分開裏克斯了使用功能mat2cell和數組索引的大小在B

    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); 
    

最終,我會根據速度和可讀性決定使用哪種解決方案,這可能實際上是您的基於循環的解決方案。

+0

+1很好的擺脫'UniformOutput','false'。什麼眼神。 – 2011-03-18 22:19:13

0

試試下面的表達式:

C = A(cell2mat(B)) 

你可以看看羅蘭的博客帖子大約Cell Arrays and Their Contents

+0

這個表達式使得每個元素都有一個單元格數組來自'A'的單個向量。我想創建一個單元陣列,每個單元由一個矩陣組成,矩陣由'A'的向量組成,這個向量對應於'B'的一個元素中的索引。 – 2011-03-18 09:17:34