matlab中cell数组问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab中cell数组问题相关的知识,希望对你有一定的参考价值。

如果ai,j=[x(i,j),y(i,j)z(i,j)],这样一个含三个二阶矩阵的元胞数组,
那么ak(1)表示什么呢?或者说ak(1)=?

这其实不是你对cell数组的理解问题
而是你对varargin使用方法理解的问题

varargin是可以接受一串参数列表的变量
你不需要在调用函数之前将输入参数放到cell矩阵
你只要像一般的函数调用那样,用逗号分开多个输入参数
系统会自动地将参数列表按行向量cell矩阵的方式传递给varargin
也就是说你只要定义function out=fun(varargin)
你可以fun(a,b,c,d,e)这样调用fun函数
然后在fun函数内部varargin=a,b,c,d,e;
这样的设置,是使一些输入参数个数不确定的函数能够正确调用输入参数
例如plot函数
plot(x,y);
plot(x,y,'linewidth',1,'colro','r');
甚至还可以设置线型,符号形状,符号大小,符号边框颜色,符号填充颜色等参数
还有很多matlab系统定义的函数,有很多可以设置的属性,
但很多时候我们不需要全部都设置,有时候需要设置多一点,有时候设置少一点
实际上这些函数后面的输入都是以varargin传递到函数里面的
在函数里面再根据varargin的长度,取出这些参数来进行设置

你把a,b打包成为c一个cell矩阵
然后掉用testvar(c),实际上varargin=c,是一个长度只有1的cell数组
你可以输出x,y,你也可以输出length(varargin)看看是不是1
那么varargink(1)实际上就是c(1),所以也还就是cell数组

之所以出现这样的错误,是你还没有搞清楚varargin的用法
实际varargin会对整个输入参数列表用也就是cell数组包装起来
就因为多包装了一层,所以你认为应该是数值的值其实还有一层cell每解包,还是cell
参考技术A ak(1) = amod(10,size(a,1))+1, (k-mod(10,size(a,1)))/size(a,1)(1)

matlab 如何把cell转为三维矩阵

我有一个cell是1*4cell的,每一个cell有1400*720的二维矩阵,如何把她转为一个1400*720*4的三维矩阵?

参考技术A 没有别的办法,你这个cell in cell,必须用for,而且用for也没有你说的那么夸张,我这里做了一个测试,用了一个30万行的你这样的矩阵进行了一下实验,也就用了1分钟。
下边是测试程序和测试结果(点击图放大看):
a='k','1','2';'k','4','2';'k','5','3' ;
b=repmat(a,[1e5,1]);
c=cell(1e5,3);
tic
for index=1:length(b);
c(index,:)=bindex;
end
toc
参考技术B dt = cell(1,4);
for p = 1:4
    dtp = rand(4,7);
end
R = zeros(4,7,4);
for p = 1:4
    R(:,:,p) = cell2mat(dtp);
end

追问

恩恩,非常感谢!!

本回答被提问者采纳

以上是关于matlab中cell数组问题的主要内容,如果未能解决你的问题,请参考以下文章

关于MATLAB cell元胞数组中元素的引用问题

MATLAB的cell数组

怎样把Matlab的cell 变为普通的数组

怎样把Matlab的cell 变为普通的数组

MATLAB——cell数组用法

Matlab中元胞数组与构架数组有啥不同?