matlab 去掉相同的行数据库,关于UCI数据库每行数据列数不一致的处理代码

博主分享了在MATLAB中处理UCI数据库支持向量机数据时遇到的列数不一致问题的解决方法。通过读取、处理和保存数据文件,确保每行具有相同的列数,并填充缺失值。代码实现将数据转换为适配MATLAB的格式,最终将处理后的数据保存到新的文件中以便进一步分析。
摘要由CSDN通过智能技术生成

第一次发帖,能交流相互成长,呵呵{:soso__8958479446408498907_4:}

这次发帖的内容是与支持向量机经常使用UCI数据库做测试,但有的数据文件出现每行列数不一致的问题。由于UCI数据库是C平台下的编写格式。在MATLAB下如果每行列数不一致,或由于缺少某些属性值,或由于多了一些属性标号,导致不能load.这里以libsvm自带的测试数据文件:heart_scale为例(270行),数据出现了上述小问题。下面对数据处理的代码。heart_scale存为qq.txt.数据文件处理后保存到luck.txt。不知道大家是否还有更好地方法,或能告诉我编写的代码咋样更专业些,因为是刚学matlab,很多时候感觉做事很山寨,又苦于没啥人教,呵呵,谢谢大家了。

fout=fopen('luck.txt','wt');

fid=fopen('qq.txt','r+');

for j=1:1:270

a=1;

C=[];

b=fscanf(fid,'%d',1);

C(a)=b;

a=a+1;

fseek(fid,1,0);

d1=fscanf(fid,'%d',1);

if   d1~=1

C(a)=0;

a=a+1;

end

while a<15

fseek(fid,1,0);

b=fscanf(fid,'%f',1);

C(a)=b;

a=a+1;

if  a>14

break;

end

fseek(fid,1,0);

d2=fscanf(fid,'%d',1);

if d2-d1~=1

e=a;

for   i=e:1:e+d2-d1-2

C(i)=0;

a=a+1;

end

end

d1=d2;

end

fgetl(fid);

j=j+1;

fprintf(fout,'%d %f %f %f %f %f %f %f  %f %f %f %f %f %f \n',C);

end

fclose(fid);

fclose(fout);

经过处理后的数据保留了label 和各属性值,属性标号(如1:,2:,...等被去掉),原来每行某些列缺失的属性值重新补0,这样每行列数相同。

可以加载到matlab中了。

lA=oad('luck.txt');

save matlab A;这样所有的数据就保存在了matlab.mat数据文件中的A矩阵变量中,就可以进行后续数据处理了。^_^

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值