MATLAB:使用数组的单元格数组索引单元格数组,并返回单元格数组
假设我有一个(nx1)向量的单元数组,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
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”。真讨厌。