Matlab矩阵元组的高级操作

考虑到与一般的元组操作用于区别,选用了这样的题目。

感觉题目定义的有点大了,敬请谅解!

Matlab 元胞数组的创建及其初始化: 

d=cell(2,2); % 创建一个2行2列的元组

初始化:

d(:)={[0]};  %每个元组初始化为只有一个元素0的矩阵,也可以利用一般矩阵进行初始化

a=[1,2,3];

d(:) = {a}  % 此时d中每个元组的矩阵为向量。

元组函数操作

matlab定义了一个cellfun函数,可以用来实现元组之间的操作。

函数说明见链接:对元胞数组中的每个元胞应用函数 - MATLAB cellfun - MathWorks 中国

下面简单讲述一下几种具体的使用:

假设X是一个N*M的元组,其中的每一个元素都是一个n*m的矩阵。如果要实现X中的每一个元素与一个m*n的矩阵A相乘的任务。可以利用for 循环实现:

for i=1:M
    for j=1:N
        C{i,j} = X{i,j}*A;
    end
end

这样的方法需要利用for循环,比较麻烦。也可以利用cellfun实现:

A1 = cell(N,M)
A1(:) = {A}
C = cellfun(@(x,y) (x*y),X,A,'UniformOutput',false);

如果 'UniformOutput' 名称-值对组参数的值为 false (0),则 cellfun 将以元胞数组形式返回输出。

如果是想实现两个元组对应元素相乘 ,也可以利用这种方式实现。

%%
clear all
clc
C = cell(1,10);
D = cell(1,10);
A = rand(5000,400);
B = rand(7000,400);
C(:) = {A};
D(:) = {B'};
E = cell(1,10);
tic

for i=1:10
    E{i} = C{i}*D{i};
end
toc

运行时间:
>> 历时 2.544738 秒。


tic
F  = cellfun(@mtimes,C,D,'UniformOutput',false);
toc


运行时间:
>> 历时 2.397319 秒。

谢绝转载!!!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值