Python 从csv文件导入稀疏矩阵

Python 从csv文件导入稀疏矩阵,python,csv,numpy,scipy,sparse-matrix,Python,Csv,Numpy,Scipy,Sparse Matrix,我有一个csv文件,其标题如下: 鉴于此test.csv文件包含稀疏矩阵: "A","B","C","D","E","F","timestamp" 611.88243,0,0,0,0,0,0 0,9089.5601,0,864.07514,0,0,0 0,0,5133.0,0,0,0,0 我只想将其加载为一个稀疏矩阵/ndarray,包含3行7列。 如果使用load.txt,则得到3行7列的数组 numpy.loadtxt(open("test.csv","rb"),delimiter=","

我有一个
csv
文件,其标题如下:

鉴于此
test.csv
文件包含
稀疏矩阵

"A","B","C","D","E","F","timestamp"
611.88243,0,0,0,0,0,0
0,9089.5601,0,864.07514,0,0,0
0,0,5133.0,0,0,0,0
我只想将其加载为一个稀疏矩阵/ndarray,包含3行7列。 如果使用
load.txt
,则得到3行7列的数组

numpy.loadtxt(open("test.csv","rb"),delimiter=",",skiprows=1)

现在,我的文件实际上很大,有10000列和7000行。因此,加载要花费很多时间。在
scipy/numpy
中是否有任何有效的方法将矩阵作为稀疏矩阵或数组加载,以便利用稀疏特性减少加载时间?

我在您的数据上测试了这个简单的
loadtxt
(复制以生成(39,7)数组):

它的速度只有
np.loadtxt
的2倍

由此产生的结果可以转化为稀疏矩阵,例如
sparse.csr_矩阵(loadtext(…)
)。但这一步不会节省任何时间

可以想象的是,我函数中的数据行
y
可以变成一个稀疏矩阵,然后收集到一个大的稀疏矩阵中。但要有效地做到这一点,必须对
scipy.sparse
矩阵类型有很好的了解。我对节省时间并不乐观


如果只加载一次或很少加载此文件,则只需使用“loadtxt”或简化版本,并接受时间成本。但是如果您必须频繁地加载它,那么以更有效的形式保存它可能是值得的

您可以尝试简单的numpy保存和加载(尽管在我的测试中,这要慢一些)

scipy.io
中的两种格式可以保存
sparse
矩阵。例如
matlab
兼容格式:

io.savemat('stack24426239.mat',{'x2':sparse.csr_matrix(x1)})
x2 = io.loadmat('stack24426239.mat')['x2']

在我的小测试中,这个
loadmat
my_loadtxt
快一点。我不知道在一个大得多的文件里会怎么样。“.mat”也比“.txt”小一些。

我怀疑加载速度会更快,除非首先使用稀疏格式存储矩阵。
io.savemat('stack24426239.mat',{'x2':sparse.csr_matrix(x1)})
x2 = io.loadmat('stack24426239.mat')['x2']