rev*_*nge 6 indexing matlab cell-array
假设我有一个(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
Run Code Online (Sandbox Code Playgroud)
循环相当于:
C = cellfun(@(x)[A{x}],B,'UniformOutput',false); %# implicit for loop w/ closure
Run Code Online (Sandbox Code Playgroud)
我可以单独使用索引表达式吗?或者至少没有循环?
我想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);
Run Code Online (Sandbox Code Playgroud)这是cellfun基于您的解决方案的更紧凑版本:
C = cellfun(@(x) {[A{x}]}, B);
Run Code Online (Sandbox Code Playgroud)最终,我会根据速度和可读性决定使用什么解决方案,这实际上可能是基于for循环的解决方案.