MATLAB:使用数组的单元数组索引单元数组并返回单元数组

时间:2011-03-18 08:10:41

标签: matlab indexing cell-array

假设我有一个(n X 1)个向量的单元格数组A,以及一个包含A索引的向量的单元格数组,称为B。我希望提取一个单元格数组C,以便C{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()可能必须参与,但无法弄清楚。

2 个答案:

答案 0 :(得分:6)

以下是两种替代解决方案:

  • 收集B的所有索引以及函数cell2mat,索引A的内容以生成一个大矩阵,然后使用函数{将该矩阵除以{3}}以及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);
    
  • 以下是基于mat2cell的解决方案的更紧凑版本:

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

最终,我会根据速度和可读性来决定使用什么解决方案,这实际上可能是基于for循环的解决方案。

答案 1 :(得分:0)

尝试以下表达式:

C = A(cell2mat(B))

您可以查看Loren关于Cell Arrays and Their Contents

的博客文章