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

问题描述 投票:6回答:2

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

matlab indexing cell-array
2个回答
6
投票

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

  • 收集B的所有索引以及函数cell2mat,索引A的内容以生成一个大矩阵,然后使用函数mat2cellB中索引数组的大小来划分该矩阵: 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循环的解决方案。


0
投票

请尝试以下表达式:

C = A(cell2mat(B))

你可以看看Loren关于Cell Arrays and Their Contents的博客文章

© www.soinside.com 2019 - 2024. All rights reserved.