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

MATLAB:使用数组的单元格数组索引单元格数组,并返回单元格数组,matlab,indexing,cell-array,Matlab,Indexing,Cell Array,假设我有一个(nx1)向量的单元数组,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 = c

假设我有一个(nx1)向量的单元数组,
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()
可能必须参与其中,但无法解决

尝试以下表达式:

C = A(cell2mat(B))

你可以看看Loren关于

的博文,这里有两个备选方案:

  • B
    的所有索引与函数一起收集,为
    A
    的内容编制索引,形成一个大矩阵,然后使用函数和
    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);
    
  • 以下是基于您的解决方案的更紧凑版本:

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

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

此表达式使每个元素都成为
a
中的单个向量。我想创建一个单元数组,每个元素都是由
a
中的向量组成的矩阵,对应于
B
+1元素中的索引,很好地去除了“UniformOutput”和“false”。真讨厌。