找回密码
 注册
关于网站域名变更的通知
查看: 394|回复: 1
打印 上一主题 下一主题

matlab中的mat2cell及cellfun使用

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-12-15 17:41 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
本帖最后由 mytomorrow 于 2020-12-15 17:47 编辑 1 t8 Q1 W0 F9 M6 i  a

! O9 ?4 z# w: \6 e; |

遇到了将一个矩阵分为几个子矩阵并分别对子矩阵进行操作的问题,经网上搜索测试,学习使用mat2cell及相应的cellfun,下面是一些个人的理解。

先说mat2cell函数,从函数名可以看出,这个函数的作用就是将矩阵分为几个子矩阵,也就是所谓的胞元(cell)。为了说清楚这个函数的作用,先引入数学中的一个概念叫做笛卡儿积,具体概念示例如下图:

在mat2cell函数中,有三个参数,第一个参数是想要分解的矩阵,第二个和第三个参数一般都是集合的形式,表示分解的尺度。分解得到的子矩阵的大小就是按照第二个和第三个参数的笛卡儿积来确定的。举一个例子:

res=mat2cell(x,[1 2 3],4)

这行代码的作用就是将矩阵x分解为3个矩阵,其大小分别为1*4,2*4和3*4。需要注意的是,分解产生的子矩阵拼接起来必须等于原始矩阵,这是很显然的一个要求,但是初次使用的时候不注意就会报错。这适合可能会有一个问题,比如说原始矩阵规模相对较大,我要是想分解成20个8*4的矩阵,难道需要在第二个参数中写入20个8吗?显然这是费时费力的。此时可以借助ones函数来实现类似的功能:

seg1=8*ones(20,1);

res=mat2cell(x,seg1,4);

问题就迎刃而解了。方便起见,以上示例固定了第三个参数,假设了原矩阵只有4列,实际上其也是可以根据个人需要进行设定的。

( i% S; \6 C. V9 o  S2 u

现在新问题出现了,如果我相对每一个子矩阵进行求和等操作,难道需要考虑位置关系借助for循环来实现吗?直觉上应该有更简单的实现方法,这也就是相关的cellfun了。下面对cellfun进行相关的解释说明。

cellfun的操作对象就是cell数组,可以利用一些定义的函数批量处理cell2mat产生的子矩阵。下面通过简单的例子来说明,具体细节我没有认真研究,记住调用的格式就好了。

%-------------------------------------------------------------------------------------------------------mytest

该用户从未签到

2#
发表于 2020-12-15 18:25 | 只看该作者
matlab中的mat2cell及cellfun使用
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-20 01:28 , Processed in 0.078125 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表