请问如何批量获取matlab元胞数组非空元素中符合条件的内容?

例如一个n×n的元胞数组,只有部分元素有内容,非空元素都是m×3的矩阵,各元素矩阵行数m不一定相同,现在想把非空元素的矩阵第3列提取出来,组成一个向量,请问有什么好办法?... 例如一个n×n的元胞数组,只有部分元素有内容,非空元素都是m×3的矩阵,各元素矩阵行数m不一定相同,现在想把非空元素的矩阵第3列提取出来,组成一个向量,请问有什么好办法?谢谢。 展开
 我来答
tianxiawulang
2013-12-19 · TA获得超过2.7万个赞
知道大有可为答主
回答量:4732
采纳率:89%
帮助的人:2576万
展开全部

参考代码

>> c={zeros(2,3) [] magic(3); [] ones(4,3) pascal(3)}
c =
    [2x3 double]              []    [3x3 double]
              []    [4x3 double]    [3x3 double]
>> idx=cellfun(@(x)~isempty(x),c,'UniformOutput',true);
>> c1=cellfun(@(x)x(:,3),c(idx),'UniformOutput',false)
c1 =
    [2x1 double]
    [4x1 double]
    [3x1 double]
    [3x1 double]
>> cat(1,c1{:})
ans =
     0
     0
     1
     1
     1
     1
     6
     7
     2
     1
     3
     6

 

说明

一共4条语句:

  • 第1句构造一个简单的测试用例

  • 第2句筛选非空单元;

  • 第3句提取非空单元的第三列;

  • 第4句将提取的内容拼接为一个列向量

主要用到了cellfun和cat两个函数以及匿名函数,请自行查阅文档好好体会一下,有困难再追问。

 

顺便提醒楼上一下,元胞数组是MATLAB中很有特色、实用价值很大的一种数据类型,你用MATLAB很多年都没用过,我只能说为你感到惋惜。这种数据类型从十几年前5.0版刚出来我就觉得非常有用,这么多年来用了很多,尤其是是7.x版引入了cellfun函数以及匿名函数之后,用起来就更加方便了。

小明332
2013-12-19 · TA获得超过101个赞
知道答主
回答量:63
采纳率:0%
帮助的人:62.5万
展开全部
要是知道元胞数组哪些是空的话,直接挨着去取就可以;;不知道的话,加一个循环检测一下,然后再提取就可以
更多追问追答
追问
谢谢,除了循环没有其他好的办法了吗?
追答
元胞数组的操作很有限,find函数什么的用不了。。据我所知没有什么好的办法了 看别人有没有高招。。。。我好奇你为什么要用元胞数组呢 我用matlab这么多年 都没用过
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式