1 K- i* t) a+ r# YCell Array and Struct Array8 J1 C) n% p+ p; m5 ]
s = cell2struct(c, fields, dim) cell数组转换为struct数组,注意fields为char数组或者cell数组,而且size(c,dim) == length(fields) % If fields is a cell arraysize(c,dim) == size(fields,1) % If fields is a char array 这个经常错误就是fields类型以及dim不对- e! A1 v, [3 w/ Z
c = struct2cell(s) struct数组转换为cell数组 这个基本没有什么错误的/ G" r `1 k; O- Y
/ t6 ^+ z# ^" ^0 c) K7 BMatrix and Cell Array- m, {8 Q' Z" A, E
c = mat2cell(x, m, n) 转换为 m行n列cell数组 m = cell2mat(c) 必须是同一类型,而且限制不可包含cell数组或object类型,但是struct结构是可以的(同样这个struct不含 cell和object类型,否则依旧出错) - c$ u1 G2 w: E2 T 7 H4 B. ^ ?* {) I% e- }Double and Cell Array 7 P5 h+ Y3 Q) Q0 |2 j I# DC = num2cell(A, [dim1, dim2, ...]) 返回C的维数是numel(A)/prod(X,Y,...) dimN 是一个整数,范围是1到ndims(A)8 |1 L8 T4 y0 U
只有数值矩阵才可以直接转换为cell,没有供cell转为double的方法.这是非常让人恼火的!不过理解之后就知道,cell本来就是混合类型的,直接转向数值类型单一矩阵,这样是不合理的.通常如果是的确是数值类型的可以走以下路线:cell->cell2mat 这时候注意cell2mat的条件非cell和object.否则,循环或者cellfun处理.如果可以使用 cell2mat 或者cat(dim,c{:}).很多时候都很方便 : D( B4 |$ e$ Y/ z* jCell Arrays of Strings * j, e& }- v/ ]
单独列出了是因为很多时候都要接触这个,基本txt之类读取来的数值数据都是char的cell数组~ ' u: ~0 f$ S- @$ S, p可以使用cell参数与字符有关的部分函数(基本都支持) w) P% a ^$ B( r% r
cellstr Convert a character array to a cell array of strings.会去除末尾空白2 v) }; D% t' n* L1 f$ y) S
char Convert a cell array of strings to a character array. 会恢复转换时候失去的空白: p$ _6 n" n `1 S5 O: v
deblank Remove trailing blanks from a string. & P4 g# [: O* ?iscellstr Return true for acell array of strings. ; y9 z( S4 Z2 F$ C/ J3 _; [sort 排序. _2 L/ _1 e, L ystrcat连接字符./ Z7 T) U M" G9 \. l1 v: g% d
strcmp对比字符.8 C9 i$ K" N$ L( e. t* y7 V& P
strmatch 查找字符. ; r8 ^. x; g) r, O Z* F" `2 ~" cstrrep 替换字符 ' C/ p# A3 a& `* m; S9 Cregexp系列及accumarray支持行列向量. 2 h4 k6 y% j! X+ E5 k6 I ; X+ z$ V5 X( g4 N# H2 i+ t读写 ' _5 s0 T, N, M' \数据读取进来了,处理后当然是需要保存的,可是面对要求 你总是很无奈,要是可以.mat格式那个很好啊 可是大部分要求都是txt之类的.(不明白为什么呢 其实数据库之类Matlab也是支持的...唉,需求总是最后的注脚...)首先要了解怎么情况会有cell数组产生:具体查看textscan 的说明.大文件的读取首先推荐这个函数,处理灵活可以省去很多功夫,具体的格式设置很关键!能够有效分离cell数据的结果方便处理~否则3000万个数据循环绝对是out of memory...尽量使用高级的IO读写...另外,7.0很多读取都是数值返回cell的char类型数组 7.6以上都使用double了,包括xlsread...* H; K! A3 J% B0 [! e
如果允许,xlswrite是最好的选择~大量数据测试的结果还是非常好的1 n$ @, v& Z, {1 ?2 n1 F: {8 d; J
在Matlab帮助里面的循环例子: ! W% L. a" u4 y2 f H; X5 pmycell = { 'a' 1 2 3 ; 'b' 4 5 6 };, Y* B& a" Z# U& e
[nrows,ncols]= size(mycell); 2 z4 P" y, O8 o& k0 @- f6 ?( i6 qfilename = 'celldata.dat'; - u, N: F7 L! {fid = fopen(filename, 'w');4 N3 J' ~* t5 \5 U- ^) v$ l4 n
for row=1:nrows ) |- f% s& ~9 S1 l fprintf(fid, '%s %d %d %d\n', mycell{row,:});; v9 W+ ^5 ?% _9 v
end 0 a3 r# L! G/ q9 g& `fclose(fid); - e' C' ]4 G$ V, P' g0 F) y4 p' j% p7 O/ l
复制代码 1 B m+ `. j9 l仅有数值时候 可以考虑先cell2mat 然后csvwrite.) [- G5 {8 Q. y$ Q