求助:如何将cell类型数据高效转化为double数据
本帖最后由 xiangpan18 于 2014-3-3 17:30 编辑本人尝试从文档中读入数据到matlab中
数据文件格式为
ROW 1 NODE 2 DEG. OF. FR. =UX
1 0.12919216E+09 2 0.33745493E+08 3-0.95446667E+08 4 0.00000000E+00
5 0.00000000E+00 6 0.00000000E+00 7 0.00000000E+00 8 0.00000000E+00
9 0.00000000E+00 10 0.00000000E+00 11 0.00000000E+00 12 0.00000000E+00
13 0.00000000E+00 14 0.00000000E+00 15-0.33745493E+08 16-0.33745493E+08
17 0.00000000E+00 18 0.00000000E+00 19 0.00000000E+00 20 0.00000000E+00
21 0.00000000E+00 22 0.00000000E+00 23 0.00000000E+00 24 0.00000000E+00
25 0.00000000E+00
将其读成一行数组,其中的整数是数据在数组中的位置,比如
1 0.12919216E+09 2 0.33745493E+08 3-0.95446667E+08 4 0.00000000E+00
5 0.00000000E+00 6 0.00000000E+00 7 0.00000000E+00
读成
因为数据的长度不一定,我采用的是正则表达式的方式读取
首先读行tline=fgetl(fid);
然后正则表达式tline=regexp(tline,'(?:\s+\d+\s?)|(?:+)','match');
这样读出来tline为cell类型
我用for循环,逐个将str2double(tline{i})转化为double型数据,但这样操作很慢,请教有没有高效的方式读取
多谢指教!
要读入的数组维度不一定是25 str = fileread('C:\Users\Administrator\Downloads\ZONGGANG.OUT');
s = regexp(str,'\d{1,2}\s?(\-?0\.\d+E\+\d{2})','tokens')
data=str2double(reshape(,25,[])) 我试了下,你在主楼放的程序运行效率也还可以接受啊。你跑这个程序用了多久?Matlab是什么版本的? nwcwww 发表于 2014-3-4 04:46
我试了下,你在主楼放的程序运行效率也还可以接受啊。你跑这个程序用了多久?Matlab是什么版本的? ...
我是matlab2013a,这个程序运行还可以0.159s,但这个维度很小,只有25,我读更大的数据文件时就比较慢了
页:
[1]