假设我有一个(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() ,但无法弄清楚。
回答:
这是两个替代解决方案:
- 收集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循环的解决方案。
更多&回答...