前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mat格式数据集转换为arff与txt格式

mat格式数据集转换为arff与txt格式

作者头像
里克贝斯
发布2021-05-21 11:32:17
9240
发布2021-05-21 11:32:17
举报
文章被收录于专栏:图灵技术域

下面的代码给出了将mat格式数据集转换为arff与txt格式的matlab代码。

注意,每个.mat文件中只有一个数据集,其中共有m+1列,最后一列是label。

转为arff: mat2arff.m代码

MATLAB

代码语言:javascript
复制
%
% This function is used to convert the input data to '.arff'
% file format,which is compatible to weka file format ...
%
% Parameters:
% input_filename -- Input file name,only can conversion '.mat','.txt'
% or '.csv' file format ...
% arff_filename -- the output '.arff' file ...

% NOTEs:
%The input 'M*N' file data must be the following format:
% M: sampel numbers;
% N: sample features and label,"1:N-1" -- features, "N" - sample label ...


% 读取文件数据 ...
clear
clc
input_filename = 'GLIOMA-t.mat';
arff_filename = 'GLIOMA.arff';
if strfind(input_filename,'.mat')
matdata = importdata(input_filename);
elseif strfind(input_filename,'.txt')
matdata = textread(input_filename) ;
elseif strfind(input_filename,'.csv')
matdata = csvread(input_filename);
end

[row,col] = size(matdata);
f = fopen(arff_filename,'wt');
if (f < 0)
error(sprintf('Unable to open the file %s',arff_filename));
return
end
fprintf(f,'%s\n',['@relation ',arff_filename]);
for i = 1 : col - 1
st = ['@attribute att_',num2str(i),' numeric'];
fprintf(f,'%s\n',st);
end
% 保存文件头最后一行类别信息
floatformat = '%.16g';
Y = matdata(:,col);
uY = unique(Y); % 得到label类型
st = ['@attribute label {'];
for j = 1 : size(uY) - 1
st = [st sprintf([floatformat ' ,'],uY(j))];
end
st = [st sprintf([floatformat '}'],uY(length(uY)))];
fprintf(f,'%s\n\n',st);
% 开始保存数据 ...
labelformat = [floatformat ' '];
fprintf(f,'@data\n');
for i = 1 : row
Xi = matdata(i,1:col-1);
s = sprintf(labelformat,Y(i));
s = [sprintf([floatformat ' '],[; Xi]) s];
fprintf(f,'%s\n',s);
end
fclose(f);

转为txt: mat2txt.m代码

当然也可用save直接转换,但是会出现每一行开头会空两格的情况。

注意dataName.mat中的数据集名称是data

MATLAB

代码语言:javascript
复制
clc
clear
load('dataName.mat')
fid = fopen('dataName.txt', 'wt');
for i = 1 : size(data, 1)
    for j = 1 : size(data, 2) - 1
        fprintf(fid,'%e   ',data(i, j));
    end
    fprintf(fid,'%e\n',data(i, size(data, 2)));
end
fclose(fid);

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-08-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 转为arff: mat2arff.m代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档