如何将cell阵列中的资料个别做计算 matlab
发布网友
发布时间:2022-08-25 15:03
我来回答
共2个回答
热心网友
时间:2024-11-24 08:43
个别引用cell里面的元素,其实和引用一般的矩阵元素相似,只是不用小括号而用大括号
a{1,2}这就可以引用a中1行二列的元素,如果元素本身是一个一般的数据矩阵,那么可以
a{1,2}(1,2)引用cell矩阵a中1行2列的元素中(该元素是个一般数据矩阵)的1行2列的数
按照这样的引用,不难对cell矩阵中每个单元中的数据去做相应的操作
而对整个cell矩阵每个元素都操作的话,也不难用循环去实现
对于整个cell矩阵每个元素都要进行相同操作的时候后
可以用cellfun实现,效率要比用循环高
例如,我们要求cell矩阵中每一个元素的长度(假设原来每一个元素都是矩阵),那么可以
b=cellfun(@length,a);
b就会返回一个形状和a一样的矩阵,由于length返回一个标量,所以b退化为一般的数据矩阵
b中的每一个数,对应于a中相应位置矩阵的长度
我们也可以自己设定函数,让cellfun将函数实施于cell矩阵的每一个元素
例如你要求 每个cell的(对角元素和+1)/4,那么可以这样
func=@(x) (sum(diag(x))+1)/4;
b=cellfun(func,a);
那么b就是a中每个矩阵的 (对角和+1)/4
这里的func我用了匿名函数
你也可以直接写一个函数m文件
其实就是把你要对其中每一个数组的操作写成一个函数
y=func(x) (利用输入数组x计算产生结果y的函数func)
b=cellfun('func',a);
其实等价于
for i=1:size(a,1)
for j=1:size(a,2)
b(i,j)=func(a{i,j});
end
end
只是用cellfun的书写效率和运行效率都比用循环的效率高
注意,如果你的函数y=func(x) 返回的y不是一个标量值
而是矩阵,字符串,cell数组等不单单占一个存储空间的数据时
要设置cellfun的输出形式UniformOutput为0
b=cellfun('func',a,'UniformOutput',0);
这时候b也是一个cell矩阵了,每个元素是根据a中计算的结果
例如a中的元素都是3x3的矩阵,现在要求其每个矩阵的逆矩阵
b=cellfun(@inv,a,'UniformOutput',0);
热心网友
时间:2024-11-24 08:44
个别引用cell里面的元素,其实和引用一般的矩阵元素相似,只是不用小括号而用大括号
a{1,2}这就可以引用a中1行二列的元素,如果元素本身是一个一般的数据矩阵,那么可以
a{1,2}(1,2)引用cell矩阵a中1行2列的元素中(该元素是个一般数据矩阵)的1行2列的数
按照这样的引用,不难对cell矩阵中每个单元中的数据去做相应的操作
而对整个cell矩阵每个元素都操作的话,也不难用循环去实现
对于整个cell矩阵每个元素都要进行相同操作的时候后
可以用cellfun实现,效率要比用循环高
例如,我们要求cell矩阵中每一个元素的长度(假设原来每一个元素都是矩阵),那么可以
b=cellfun(@length,a);
b就会返回一个形状和a一样的矩阵,由于length返回一个标量,所以b退化为一般的数据矩阵
b中的每一个数,对应于a中相应位置矩阵的长度
我们也可以自己设定函数,让cellfun将函数实施于cell矩阵的每一个元素
例如你要求 每个cell的(对角元素和+1)/4,那么可以这样
func=@(x) (sum(diag(x))+1)/4;
b=cellfun(func,a);
那么b就是a中每个矩阵的 (对角和+1)/4
这里的func我用了匿名函数
你也可以直接写一个函数m文件
其实就是把你要对其中每一个数组的操作写成一个函数
y=func(x) (利用输入数组x计算产生结果y的函数func)
b=cellfun('func',a);
其实等价于
for i=1:size(a,1)
for j=1:size(a,2)
b(i,j)=func(a{i,j});
end
end
只是用cellfun的书写效率和运行效率都比用循环的效率高
注意,如果你的函数y=func(x) 返回的y不是一个标量值
而是矩阵,字符串,cell数组等不单单占一个存储空间的数据时
要设置cellfun的输出形式UniformOutput为0
b=cellfun('func',a,'UniformOutput',0);
这时候b也是一个cell矩阵了,每个元素是根据a中计算的结果
例如a中的元素都是3x3的矩阵,现在要求其每个矩阵的逆矩阵
b=cellfun(@inv,a,'UniformOutput',0);