xiangpan18 发表于 2014-3-3 17:25:18

求助:如何将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型数据,但这样操作很慢,请教有没有高效的方式读取
多谢指教!






xiangpan18 发表于 2014-3-3 17:31:58

要读入的数组维度不一定是25

liuyalong008 发表于 2014-3-3 19:00:22

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,[]))

nwcwww 发表于 2014-3-4 04:46:22

我试了下,你在主楼放的程序运行效率也还可以接受啊。你跑这个程序用了多久?Matlab是什么版本的?

xiangpan18 发表于 2014-3-4 12:19:50

nwcwww 发表于 2014-3-4 04:46
我试了下,你在主楼放的程序运行效率也还可以接受啊。你跑这个程序用了多久?Matlab是什么版本的? ...

我是matlab2013a,这个程序运行还可以0.159s,但这个维度很小,只有25,我读更大的数据文件时就比较慢了
页: [1]
查看完整版本: 求助:如何将cell类型数据高效转化为double数据