如何无迭代提取MATLAB二维cell数组各元素的长度信息
解决MATLAB非迭代提取cell数组元素长度的问题
这个需求很好解决,不用写for循环,MATLAB有现成的向量化工具能直接搞定!先给你上两种实用的方法:
方法1:用cellfun + numel
cellfun就是专门用来对cell数组的每个元素批量应用函数的工具,完美避开迭代。直接一行代码就能得到结果:
% 先构造你的输入cell数组(示例) Mat = {rand(1,4), rand(1,5), rand(1,6)}; % 提取每个元素的长度 num = cellfun(@numel, Mat);
运行后num就是[4 5 6]。原理很简单:@numel是指向numel函数的句柄,cellfun会自动遍历Mat里的每一个cell,对每个元素执行numel计算长度,最后把结果拼接成一个行向量。
方法2:用cellfun + size(针对行向量场景)
如果你确定每个cell里都是1×m的行向量,也可以用size指定取第二维度的长度,语义更明确:
num = cellfun(@(x) size(x,2), Mat);
这个和方法1的效果完全一致,只是更精准地针对行向量的维度来获取长度。
为什么直接用size/numel不行?
你之前尝试直接用size(Mat)或者numel(Mat),得到的是cell数组本身的尺寸(3×1),而不是每个内部元素的尺寸。必须通过cellfun把函数“映射”到每个cell内部的元素上,才能拿到你要的结果。
内容的提问来源于stack exchange,提问作者Kevin Dong
相关产品推荐
相关产品推荐

