NumPy:将稀疏矩阵从R导入Python
我在R中有一个非常大和稀疏的矩阵,是用“矩阵”包创建的,我想用python+numpy处理它。R对象是csc格式的,如果我使用Matrix包中的函数writeMM导出它,输出结果如下所示:NumPy:将稀疏矩阵从R导入Python,numpy,matrix,scipy,sparse-matrix,Numpy,Matrix,Scipy,Sparse Matrix,我在R中有一个非常大和稀疏的矩阵,是用“矩阵”包创建的,我想用python+numpy处理它。R对象是csc格式的,如果我使用Matrix包中的函数writeMM导出它,输出结果如下所示: %%MatrixMarket matrix coordinate real general 4589 17366 160441 22 1 5.954510725783322 36 1 29.77255362891661 41 1 23.81804290313329 74 1 5.954510725783322
%%MatrixMarket matrix coordinate real general
4589 17366 160441
22 1 5.954510725783322
36 1 29.77255362891661
41 1 23.81804290313329
74 1 5.954510725783322
116 1 59.54510725783322
127 1 11.909021451566645
159 1 17.863532177349967
其中第一列是行,第二列是列,第三列是值
我想知道如何将其导入python。我看到scipy有一个模块可以处理列压缩的稀疏矩阵,但它没有从文件中创建一个矩阵的功能。您可以使用它来实现您想要的功能
In [11]: mmread("sparse_from_file")
Out[11]:
<4589x17366 sparse matrix of type '<class 'numpy.float64'>'
with 7 stored elements in COOrdinate format>
[11]中的:mmread(“稀疏的\u文件”)
出[11]:
注意,结果是一个COO稀疏矩阵。
如果需要csc\u矩阵
,则可以使用sparse.coo\u matrix.tocsc
现在,您提到要使用numpy处理这个非常大且稀疏的矩阵。这可能是不切实际的,因为numpy只在密集阵列上运行,如果您的矩阵确实非常大且稀疏,您可能无法以密集格式存储它
因此,对于您的用例,您最好坚持使用最有效的scipy.sparse
格式。您可以使用它来实现您想要的功能
In [11]: mmread("sparse_from_file")
Out[11]:
<4589x17366 sparse matrix of type '<class 'numpy.float64'>'
with 7 stored elements in COOrdinate format>
[11]中的:mmread(“稀疏的\u文件”)
出[11]:
注意,结果是一个COO稀疏矩阵。
如果需要csc\u矩阵
,则可以使用sparse.coo\u matrix.tocsc
现在,您提到要使用numpy处理这个非常大且稀疏的矩阵。这可能是不切实际的,因为numpy只在密集阵列上运行,如果您的矩阵确实非常大且稀疏,您可能无法以密集格式存储它
因此,对于您的用例,您最好坚持使用最有效的
scipy.sparse
格式。是的,您的numpy速度是正确的-它甚至比使用R进行计算还要慢。但是,pyspark的SparseVector照明速度很快,完成了与numpy在1小时内完成一天工作相同的工作。很高兴看到你找到了替代品。scipy.sparse可能已经完成了这项工作,通常这取决于为手头的计算选择正确的格式(它们在简单运算/线性代数等方面的性能非常不平等)。是的,你对numpy的速度是正确的-它甚至比用R进行计算还要慢。但是,pyspark的SparseVector照明速度很快,完成了与numpy在1小时内完成一天工作相同的工作。很高兴看到你找到了替代品。scipy.sparse可能已经完成了这项工作,通常这取决于为手头的计算选择正确的格式(它们在简单运算/线性代数等方面的性能非常不同)。