import osimport sysimport scanpy as scimport anndata as adimport numpy as npimport pandas as pdimport h5pyob1=sc.read('tmp.h5ad')mat=pd.DataFrame(data=ob1.X.todense(),index=ob1.obs_names,columns=ob1.var_names)mat.to_hdf("mat.h5","mat")如果要在Python里重新读取h5格式的矩阵,可以运行下面代码:
mat=pd.read_hdf("mat.h5",key="mat")
上面的脚本是我测试过比力好的生存矩阵的方案,下面代码块则是最初的版本,但是在R内里读入之后会缺失行名和列名,所以还要额外生存行名与列名,之后加上,特殊贫困,所以接纳上面的代码块更为简便方便。
mat=ob1.X.todense().Twith h5py.File('mat.h5','w') as f1: f1.create_dataset("mat",data=mat)##在Python里读取h5格式矩阵的方法with h5py.File('mat.h5','r') as f1: mat=f1['mat'][:]为什么用h5生存矩阵?
理论上是可以转成数据框之后生存为csv或tsv文件,但如许生存很慢,读取数据也很慢,因此存为h5文件更加方便。但对于小文件,h5文件反而占的空间更大,但h5文件应该是压缩过的,就很希奇,不太懂其中原理,但如果是大文件则能有用举行压缩使得所占空间更小。
pd.DataFrame(data=ob1.X.todense().T, index=ob1.var_names,columns=ob1.obs_names).to_csv('raw_mat.csv',sep="\t",float_format='%.0f')