Matlab把稀疏矩阵表示转换为稀疏矩阵
问题说明
我现在有一个图数据集,也就是wiki数据集,
wiki数据集
但是作者给的是一个稀疏矩阵表示,但是我想要用到的并不是稀疏表示,我想要的是特征矩阵,没有找到什么很直接的方法,就通过百度自己总结了一个方法,下面记录一下,方便自己以后查看和遇到相同问题的同学。
#简单来说问题就是数据本来这样子
但是我想获得数据表示矩阵是这样子:
当然,后者面就是我处理完的数据了,由于我没怎么用过matlab所以比较水,但是你既然看到了这里,你应该也不太会用,哈哈。下面直接上代码了
第一步,先读取原始数据,用三个矩阵存一下。
[b,c,d]=textread('/Users/yangyangyang/Downloads/tfidf.txt','%d %.6f %.6f')
这是获得的数据:
也就是本来数据是1556595*3的矩阵,bcd把它拆开了,b就是存的行,c是列,d就是当前行列对应的值。然后接下来做的就是建立一个新矩阵存储这个稀疏矩阵表示,然后再把新矩阵写入txt文件。
[e,f]=size(b)%获取长度,也就是1556595,为了遍历,e里面就是存的长度,f就是列维度1而已
while(f<=e)
m=b(f,1)+1;
n=c(f,1)+1;
a(m,n)=d(f,1);
f=f+1;
end
这样矩阵a就建立成功
这里我没有初始化a,但是a默认都是0.接下来就是把数据存入一个txt文件里。
fid=fopen(['/Users/yang/Desktop/','out.txt'],'w');%写入文件路径
[r,c]=size(a); % 得到矩阵的行数和列数
for i=1:r
for j=1:c
fprintf(fid,'%9.8f ',a(i,j));%9.8f后面有个空格,你加\t,数据之间间距更大
end
fprintf(fid,'\n'); %换行
end
fclose(fid);
这样就在你桌面生成一个名字为out的txt文件,里面就是存的a矩阵。