Matlab把稀疏矩阵表示转换为稀疏矩阵

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矩阵。

猜你喜欢

转载自blog.csdn.net/Asure_AI/article/details/109435967