6

假设我有一个 (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()可能必须参与,但无法弄清楚。

4

2 回答 2

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

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

于 2011-03-18T14:49:49.267 回答
0

试试下面的表达式:

C = A(cell2mat(B))

您可以查看 Loren 关于单元阵列及其内容的博客文章

于 2011-03-18T09:10:44.623 回答