元胞數組cell array
Element:cell;以下標index訪問cell,以元胞內編址content addressing訪問元胞內容;cell中可以存放任何類型,任何大小的數組
cell的創建
cell()%創建元胞數組
c=cell(2);%創建2×2的
c=cell(m,n);%創建m×n的,用cell函數創建元胞數組,創建的數組為空元胞。cell函數創建空元胞數組的主要目的是為數組預先分配連續的存儲空間,節約內存占用,提高執行效率。同cppblog/MATLAB程序的優化、預先分配存儲空間
c_str=char('This is cell array');c_R=rand(3,3);c_comp=1+2i;c_sym=sym('sin(-3*t)*exp(-t)');
兩種賦值方式:index賦值和content addressing賦值
index賦值:A(1,1)={c_str};A(1,2)={c_R};A(2,1)={c_comp};A(2,2)={c_sym};
content addressing賦值:B{1,1}=c_str;B{1,2}=c_R;B{2,1}=c_comp;B{2,2}=c_sym;% The class({c_str}) and class(c_str) are cell and string, respectively.

cell array的訪問
B{1,2}
B{1,2}(1,2)

問題:我有一個cell變量。比方說3*1的size  每一個里面存了一個1?9的矩陣。matlab中有沒有快速的語句把每一個1*9的矩陣,reshape成3*3的矩陣。也就是說對一個cell變量中的每一個元素(應該是一個矩陣)進行reshape操作。當然不想用循環做。
答案:A = {rand(1,9),rand(1,9),rand(1,9)}; cellfun(@(x) reshape(x, 3, 3).', A, 'UniformOutput', false) 

cell轉化成矩陣的函數cell2mat
例:A = {rand(1,9),rand(1,9),rand(1,9)};cell2mat(A)
結構體數組 structure array
Element:structure
域訪問
域中可以存放任何類型、任何大小的數組
類C
cell和struct的轉換cell2struct.

Matlab提供了兩種定義結構的方式:直接應用和使用struct函數。
1. 使用直接引用方式定義結構
與建立數值型數組一樣,建立新struct對象不需要事先申明,可以直接引用,而且可以動態擴充。比如建立一個復數變量x:
x.real = 0; % 創建字段名為real,并為該字段賦值為0
x.imag = 0 % 為x創建一個新的字段imag,并為該字段賦值為0
x =
real: 0
imag: 0
然后可以將旗動態擴充為數組:
x(2).real = 0; % 將x擴充為1×2的結構數組
x(2).imag = 0;
在任何需要的時候,也可以為數組動態擴充字段,如增加字段scale:
x(1).scale = 0;
這樣,所有x都增加了一個scale字段,而x(1)之外的其他變量的scale字段為空:
x(1) % 查看結構數組的第一個元素的各個字段的內容
ans =
real: 0
imag: 0
scale: 0
2. 使用struct函數創建結構
使用struct函數也可以創建結構,該函數產生或吧其他形式的數據轉換為結構數組。
struct的使用格式為:
s = sturct('field1',values1,'field2',values2,…);
該函數將生成一個具有指定字段名和相應數據的結構數組,其包含的數據values1、valuese2等必須為具有相同維數的數據,數據的存放位置域其他結構位置一一對應的。對于struct的賦值用到了元胞數組。數組values1、values2等可以是元胞數組、標量元胞單元或者單個數值。每個values的數據被賦值給相應的field字段。
當valuesx為元胞數組的時候,生成的結構數組的維數與元胞數組的維數相同。而在數據中不包含元胞的時候,得到的結構數組的維數是1×1的。例如:
s = struct('type',{'big','little'},'color',{'blue','red'},'x',{3,4})
s =
1x2 struct array with fields:
type
color
x

參考文獻:http://blog.sciencenet.cn/blog-436588-320694.html