假设我在MATLAB中定义了以下数组:
x = 1:100;
我想形成一个单一的数据结构"bin"如下所示:
bin(:,1) = x(1:33); % copy 33 elements into 1st bin
bin(:,2) = x(34:66); % copy another 33 elements into 2nd bin
bin(:,3) = x(67:100);% copy remaining 34 elements into 3rd bin
然而,matlab不允许将最后34个元素添加到bin(:,3(中,因为前两个元素的大小为33。我宁愿不使用不同的变量来存储最后34个元素。MATLAB中有没有办法绕过这一点(即,我如何使用相同的数据结构"bin"将所有100个元素存储在不同大小的3列中?(
对于这样的问题,存在单元格s。它们就像其他语言中的指针一样工作:区分其地址和内容。因此,您可以在访问其内容(可能具有不同大小或类型(时查看地址(彼此相邻(
bin = cell(1,3); % allocating the cell. not necessary but good practice
bin{1} = x(1:33); % copy 33 elements into 1st bin
bin{2} = x(34:66); % copy another 33 elements into 2nd bin
bin{3} = x(67:100);% copy remaining 34 elements into 3rd bin
使用大括号{ }
进行索引将为您提供单元格的内容,而( )
为您提供该单元格的元素(显然是一个单元格(。它的工作原理类似于对其他变量类型的切片。请注意,将完整的数组放入单元格的单个元素中bin{1}
或bin{1,1}
将返回1x33数字数组。
单元数组是一种可以容纳任何对象的结构,例如不同长度的数组。mat2cell
允许您将阵列拆分为多个阵列的单元。
bin=mat2cell(x,[33,33,34])