假设我有一个(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()
可能必须参与,但无法弄清楚。
答案 0 :(得分:6)
以下是两种替代解决方案:
收集B
的所有索引以及函数cell2mat
,索引A
的内容以生成一个大矩阵,然后使用函数{将该矩阵除以{3}}以及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);
以下是基于mat2cell
的解决方案的更紧凑版本:
C = cellfun(@(x) {[A{x}]}, B);
最终,我会根据速度和可读性来决定使用什么解决方案,这实际上可能是基于for循环的解决方案。
答案 1 :(得分:0)