Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-14, 20:13   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 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所有索引以及函数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循环的解决方案。



更多&回答...
poster 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 20:44


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