MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   资料存档 (https://www.labfans.com/bbs/forumdisplay.php?f=72)
-   -   MATLAB:使用数组的单元格索引一个单元格数组并返回一个单元格数组 (https://www.labfans.com/bbs/showthread.php?t=26632)

poster 2019-12-14 20:13

MATLAB:使用数组的单元格索引一个单元格数组并返回一个单元格数组
 
假设我有一个(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]回答:[/B]

这是两个替代解决方案:
[LIST][*]收集B所有索引以及函数[URL="https://www.mathworks.com/help/matlab/ref/cell2mat.html"]cell2mat[/URL] ,索引A的内容以组成一个大矩阵,然后使用[URL="https://www.mathworks.com/help/matlab/ref/mat2cell.html"]mat2cell[/URL]函数和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);[*]这是基于[URL="https://www.mathworks.com/help/matlab/ref/cellfun.html"]cellfun[/URL]的解决方案的更紧凑版本:

C = cellfun(@(x) {[A{x}]}, B);[/LIST]最终,我将基于速度和可读性来决定使用哪种解决方案,而这实际上可能是您基于for循环的解决方案。



[url=https://stackoverflow.com/questions/5349470]更多&回答...[/url]


所有时间均为北京时间。现在的时间是 09:05

Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.