MATLAB中文论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 915|回复: 9|关注: 0

[已解决] 将cell转变成mat

[复制链接]

新手

9 麦片

财富积分


050


9

主题

47

帖子

0

最佳答案
whos data
  Name            Size                Bytes  Class    Attributes


  data      1000000x1             122271136  cell          

data为一个1000000x1的cell,cell中的每一个元素都是char型数据,如下:

a=data{1}


a =


114.48


>> whos a
  Name      Size            Bytes  Class    Attributes


  a         1x6                12  char              

现在想把data转变成mat形式,若直接用cell2mat函数报错如下:

>> cell2mat(data)
错误使用 cat
串联的矩阵的维度不一致。


出错 cell2mat (line 83)
            m{n} = cat(1,c{:,n});



data当中的数据的长度不相同,有些是4位,如12.34,而有些是五位,如12.345
本人的解决思路是利用循环将data中的每一个元素提取出来,利用str2num转变,放置到一个新的向量中,如下:


>> a=data{1};
>> a=str2num(a)


a =


  114.4800



方法虽然笨一些,但也可以,欢迎各位大侠提出更好的方法!!!

新手

9 麦片

财富积分


050


9

主题

47

帖子

0

最佳答案
 楼主| 发表于 2017-8-30 13:58:47 | 显示全部楼层
勿沉!!!

MATLAB 基础讨论
版块优秀回答者

入门

232 麦片

财富积分


50500


0

主题

255

帖子

52

最佳答案
  • 关注者: 9
发表于 2017-8-30 14:04:51 | 显示全部楼层
可以数据发出来一下吗,看看怎么弄比较方便

新手

9 麦片

财富积分


050


9

主题

47

帖子

0

最佳答案
 楼主| 发表于 2017-8-30 14:07:46 | 显示全部楼层

补上数据

本帖最后由 我要学吉他 于 2017-8-30 14:09 编辑

补发数据

OriginalHistory_069.rar

390.83 KB, 下载次数: 0

数据

新手

9 麦片

财富积分


050


9

主题

47

帖子

0

最佳答案
 楼主| 发表于 2017-8-30 14:10:07 | 显示全部楼层
syntyun 发表于 2017-8-30 14:04
可以数据发出来一下吗,看看怎么弄比较方便

数据已经上传

MATLAB 基础讨论
版块优秀回答者

入门

232 麦片

财富积分


50500


0

主题

255

帖子

52

最佳答案
  • 关注者: 9
发表于 2017-8-30 14:26:22 | 显示全部楼层

.dat的文件? 有没有.mat的啊,或者txt的

新手

9 麦片

财富积分


050


9

主题

47

帖子

0

最佳答案
 楼主| 发表于 2017-8-30 14:31:00 | 显示全部楼层
syntyun 发表于 2017-8-30 14:26
.dat的文件? 有没有.mat的啊,或者txt的

没有啊,不过没关系啊,把该文件放到工作目录下,单击右键然后可以手动选择列数据进行导入

论坛优秀回答者

入门

322 麦片

财富积分


50500


5

主题

732

帖子

67

最佳答案
  • 关注者: 10
发表于 2017-8-30 14:31:43 | 显示全部楼层 |此回复为最佳答案
syntyun 发表于 2017-8-30 14:26
.dat的文件? 有没有.mat的啊,或者txt的

不用了,我知道他什么意思

这样就好了

  1. a = cellfun(@str2num , a)
复制代码

MATLAB 基础讨论
版块优秀回答者

入门

232 麦片

财富积分


50500


0

主题

255

帖子

52

最佳答案
  • 关注者: 9
发表于 2017-8-30 14:36:27 | 显示全部楼层
我要学吉他 发表于 2017-8-30 14:31
没有啊,不过没关系啊,把该文件放到工作目录下,单击右键然后可以手动选择列数据进行导入 ...

如果是matlab手动导入的话,你是可以选择输入类型的,可以直接读为数据类型,或者写个代码读

  1. %% Initialize variables.
  2. filename = 'C:\Users\eee\Desktop\temp1\OriginalHistory_069.dat';
  3. delimiter = '\t';
  4. startRow = 32;
  5. endRow = 1000;  %%%%%%%%%%  选择读到多少行
  6. formatSpec = '%f%*s%*s%*s%*s%*s%[^\n\r]';
  7. % formatSpec = '%f[^\n\r]';

  8. %% Open the text file.
  9. fileID = fopen(filename,'r');

  10. %% Read columns of data according to the format.
  11. dataArray = textscan(fileID, formatSpec, endRow-startRow+1, 'Delimiter', delimiter, 'TextType', 'string', 'EmptyValue', NaN, 'HeaderLines', startRow-1, 'ReturnOnError', false, 'EndOfLine', '\r\n');
  12. %% Close the text file.
  13. fclose(fileID);
  14. %% Create output variable
  15. OriginalHistory069 = [dataArray{1:end-1}];
  16. %% Clear temporary variables
  17. clearvars filename delimiter startRow endRow formatSpec fileID dataArray ans;
复制代码


这里面的endRow需要自己定义下,  formatSpec是可以定义每一列是按什么格式读的

新手

9 麦片

财富积分


050


9

主题

47

帖子

0

最佳答案
 楼主| 发表于 2017-8-30 15:34:40 | 显示全部楼层
zhangqinghao 发表于 2017-8-30 14:31
不用了,我知道他什么意思

这样就好了

对,一步到位!!!:handshake
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /2 下一条

快速回复 返回顶部 返回列表