R和Python平台下操作读写稀疏矩阵(matrix.mtx.gz格式文件)的基本方法

简介: 将大型矩阵保存为稀疏矩阵格式特别有助于减少存储空间和提高数据处理的效率,因此本文将分享在R和Python平台下操作读写稀疏矩阵的基本方法。

image.png

背景 :将大型矩阵保存为稀疏矩阵格式的意义在于减少存储空间和提高数据处理的效率。稀疏矩阵是一种特殊的矩阵,其中大部分元素为零。相比之下,密集矩阵中的大多数元素都是非零的。在大型数据集中,密集矩阵可能会占用大量的存储空间,而稀疏矩阵则可以大大减少存储空间。此外,稀疏矩阵还可以提高算法的效率,因为在处理稀疏矩阵时,可以跳过大量的零元素,从而减少计算量。因此,将大型矩阵保存为稀疏矩阵格式可以减少存储空间的占用,提高数据处理的效率和速度,特别是在处理大型数据集时。

1、Python平台操作 SparseMatrix

加载读取稀疏矩阵的mmread 和 转换数据框的 Pandas模块

from scipy.io import mmread
import pandas as pd
import numpy as np

读取10X单细胞矩阵: matrix.mtx.gz(coo_matrix格式的sparse 矩阵) 、barcodes.tsv.gz (10X矩阵的列名,对应细胞Barcode)、features.tsv.gz (10X矩阵的行名,对应细胞Barcode的 gene_ID或 gene_Symbol)

_index = pd.read_csv("./features.tsv.gz", index_col=0,sep = '\t',header=None)
_index.index.name =None #把索引列的列名去掉
_col   = pd.read_csv("./barcodes.tsv.gz", index_col=0,sep = '\t',header=None)
_col.index.name =None #把列名向量的名去掉
_data  = mmread("./matrix.mtx.gz").todense()

用Pandas转换稀疏矩阵转换成DataFrame后可以应用相关函数进行操作

rna_count = pd.DataFrame(data=_data,index = _index.index,columns=_col.index)
print(rna_count .iloc[0:3,0:2])
print("gene_ID_len : "+str(rna_count .shape[0]))  ### 获取表达矩阵基因数
rna_count  = ( rna_count +1 ).applymap(np.log2) ### log 校正数据偏态

重新写出 DataFrame为 10X格式的sparse matrix等相关文件

import os
import shutil 
import gzip
import scipy
import time
fmt='%Y-%m-%d %a %H:%M:%S'
Date=time.strftime(fmt,time.localtime(time.time()))
outdir = ".Matrix_reAnno"
os.makedirs(outdir, exist_ok=True)
## ...save matrix.mtx.gz
reAnno_count_sparse_mtx = scipy.sparse.coo_matrix(rna_countrna_count_combine.values)
scipy.io.mmwrite(os.path.join(outdir,'matrix.mtx'),
                 reAnno_count_sparse_mtx,
                 comment='This counts is regenerate and remapped symbol by zhuzhiyong \n Generate DateTime::'+str(Date)
                )
with open(os.path.join(outdir,'matrix.mtx'),'rb') as mtx_in:
        with gzip.open(os.path.join(outdir,'matrix.mtx') + '.gz','wb') as mtx_gz: #创建一个读写文件'matrix.mtx.gz',用以将matrix.mtx拷贝过去
            shutil.copyfileobj(mtx_in, mtx_gz)
os.remove(os.path.join(outdir,'matrix.mtx'))
## ...save barcodes.tsv.gz
barcodesFile = pd.DataFrame(rna_countrna_count_combine.columns)
barcodesFile.to_csv(os.path.join(outdir,"barcodes.tsv.gz"),sep='\t',header =False,index=False)
## ...save features.tsv.gz
featuresFile = pd.DataFrame(rna_countrna_count_combine.index)
featuresFile.to_csv(os.path.join(outdir,"features.tsv.gz"),sep='\t',header =False,index=False)

2、R平台写出 SparseMatrix

library(Matrix)
sparse.gbm <- Matrix(pbmc_small@assays$RNA@counts, sparse = T )
write(x = sparse.gbm@Dimnames[[1]], file = "features.tsv")
write.table(scRAN@meta.data, file = 'scRNA_ref_meta.tsv', sep = '\t', quote = FALSE)
writeMM(obj = sparse.gbm, file="matrix.mtx")
system("gzip matrix.mtx")  #创建压缩文件并删除原文件 matrix.mtx.gz
scales::number_bytes(file.size("matrix.mtx.gz"))
目录
相关文章
|
2月前
|
机器学习/深度学习 Python
堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能
本文深入探讨了堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能。文章详细介绍了堆叠的实现步骤,包括数据准备、基础模型训练、新训练集构建及元学习器训练,并讨论了其优缺点。
65 3
|
24天前
|
安全
Python-打印99乘法表的两种方法
本文详细介绍了两种实现99乘法表的方法:使用`while`循环和`for`循环。每种方法都包括了步骤解析、代码演示及优缺点分析。文章旨在帮助编程初学者理解和掌握循环结构的应用,内容通俗易懂,适合编程新手阅读。博主表示欢迎读者反馈,共同进步。
|
30天前
|
Python
Python格式
Python格式
25 5
|
1月前
|
JSON 安全 API
Python调用API接口的方法
Python调用API接口的方法
178 5
|
2月前
|
算法 决策智能 Python
Python中解决TSP的方法
旅行商问题(TSP)是寻找最短路径,使旅行商能访问每个城市一次并返回起点的经典优化问题。本文介绍使用Python的`ortools`库解决TSP的方法,通过定义城市间的距离矩阵,调用库函数计算最优路径,并打印结果。此方法适用于小规模问题,对于大规模或特定需求,需深入了解算法原理及定制策略。
44 15
|
2月前
|
机器学习/深度学习 人工智能 算法
强化学习在游戏AI中的应用,从基本原理、优势、应用场景到具体实现方法,以及Python在其中的作用
本文探讨了强化学习在游戏AI中的应用,从基本原理、优势、应用场景到具体实现方法,以及Python在其中的作用,通过案例分析展示了其潜力,并讨论了面临的挑战及未来发展趋势。强化学习正为游戏AI带来新的可能性。
120 4
|
2月前
|
Python
Python编程中的魔法方法(Magic Methods)
【10月更文挑战第40天】在Python的世界中,魔法方法就像是隐藏在代码背后的神秘力量。它们通常以双下划线开头和结尾,比如 `__init__` 或 `__str__`。这些方法定义了对象的行为,当特定操作发生时自动调用。本文将揭开这些魔法方法的面纱,通过实际例子展示如何利用它们来增强你的类功能。
23 1
|
5月前
|
SQL JSON 关系型数据库
n种方式教你用python读写excel等数据文件
n种方式教你用python读写excel等数据文件
|
7月前
|
存储 Python 内存技术
python WAV音频文件处理—— (1)读写WAV文件
python WAV音频文件处理—— (1)读写WAV文件
171 14
|
8月前
|
数据挖掘 索引 Python
Python 读写 Excel 文件
Python 读写 Excel 文件
179 0