考虑到与一般的元组操作用于区别,选用了这样的题目。
感觉题目定义的有点大了,敬请谅解!
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 秒。
谢绝转载!!!