Matlab数据导入和导出

基于readtable函数

优点

可以使用 table 数据类型来将混合类型的数据和元数据属性(例如变量名称、行名称、说明和变量单位)收集到单个容器中。表适用于列向数据或表格数据,这些数据通常以列形式存储于文本文件或电子表格中。例如,您可以使用表存储试验数据,使用行表示不同的观测对象,使用列表示不同的测量变量。

实现方便,适用于规范间隔符文本,下面是readtable的常用形式,以导入取自UCIIris数据集为例:
(将数据文件后缀改为.txt即可)

%% Iris
Iris_data =  readtable('C:\Users\Alienware\Desktop\DataMining\lris\iris.data.txt');
Iris_data.Properties.VariableNames = {'sepal.length',...
                                        'sepal.width',...
                                        'petal.length',...
                                        'petal.width',...       
                                        'class'};
%Delimiter为文件中数据间隔符,在Iris中为',',可不设置此时Matlab会自动识别间隔符
%.Paropertities.VariableNames为每列数据命名
                                    
%为适应后续操作对读取到的table数表进行处理
class = table2cell(Iris_data(:,5));
numData = Iris_data{:,1:4};

%将此时工作区的变量打包保存为Iris.mat(注意清理工作区变量)
save Iris

缺点

数据间隔不规范时无法识别,如两列数据间的空格数不一致。
表现为

  1. 不指定间隔符直接使用readtable读取时,Matlab无法识别间隔符,将一行数据识别为一个整体。(Nx1 table
  2. 指定’ '(空格)为间隔符时
    readtable('*.txt','Delimiter',' ');
    
    Matlab报错:
    错误使用 readtable (line 223)
    在读取第 x* 行时失败。文本文件中的所有行都必须具有相同数量的分隔符。第 x* 行具有 y 个分隔符,而先前各行具有 y’ 个。

低级文件I/O

间隔符不规范,无法使用readtable函数时

以导入取自UCIyeast数据集为例(该数据间隔符(空格)不均匀):

% 打开输入文件并读取
fin = fopen('*\yeast.data.txt','r');

% 指定输出文件并写入
if fin>0
   fout = fopen('*\yeast.txt','w');
end

% 逐行间隔符规范化
tline = fgetl(fin);                % 读取第一行开始判别
while ischar(tline)           
   space = isspace(tline);         % 空格判断
   dspace = diff(space);           % 差分
   dspace = [0 dspace];            % 齐到向量
   ind = find(dspace~=0);          % 找到空格起始位置
   tind = ~space;                  % 取非零数值信息
   tind(ind) = 1;                  % 设置标记
   tline = tline(tind);            % 过滤数据
   fprintf(fout,'%s\n',tline);  
   tline = fgetl(fin);             % 读取下一行
end

%关闭文件
fclose(fin);
fclose(fout);

最后再依照readtable读取生成的新规范数据即可。

更多详情请参考Matlab文档说明

https://ww2.mathworks.cn/help/matlab/data-import-and-export.html?s_tid=CRUX_lftnav

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

零星之尸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值