2011-03-18 115 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