我最近很难处理稀疏矩阵并将它们堆叠到单个矩阵中。 我曾经创建多个csr_matrix对象
vec_list = sp.sparse.csr_matrix(my_vec_i) # every vector of shape (1,200)
在 vec_list
由大约 100 个稀疏矩阵组成之后,我使用 scipy 的(不是 numpy 的)sp.vstack 函数将所有 100 个条目合并到形状为 (100, 200) 的 csr 矩阵。
现在,在我当前的设置(python 3.8)中,我看到一条警告,指出 sp.vstack 将被弃用,但无论如何,无论我使用 numpy 还是 scipy 的 vstack 功能,我最终都会有一个形状为 (100,1) 的数组,其中我的 200 列被视为第一列也是唯一列中的 1 个 csr_matrix 条目。
在我的旧代码片段中,我可以看到,sp.vstack(vec_list)
创建了一个形状为 (100,200) 的稀疏 crs 矩阵。
我错过了什么吗?有人对此有什么想法吗?我有点绝望地想要创建我的堆叠稀疏矩阵..谢谢大家
编辑: 正如您在下面的评论中看到的那样,np.vstack 和 sp.vstack 不一定会做同样的事情(在我的回答中,我悲伤 np.vstack 两次,但我的意思是 sp.vstack 一次)。我使用的是精确的解决方案(复制的),它在某个时候返回了错误,因为没有发生堆叠。 为了使用 sp.stacking,我堆叠了非 csr_matrix 数组,然后将其转换为 csr_matrix。当使用大量数组时,这是不切实际的,但至少我可以毫无问题地运行该文件。 为了解决 Tinu 的以下答案,我无法以这种方式解决它,因为执行示例代码时的结果如下所示:
>>> np.vstack(vec_list).shape
(100, 1)
>>> sp.vstack(vec_list).shape
(100, 200)
Python 3.8.2、Scipy 1.4.1
最佳答案
不幸的是,我无法重现您的错误。这是我的代码:
from scipy.sparse import csr_matrix, vstack
import numpy as np
vec_list = []
for i in range(100):
vec_list.append(csr_matrix(np.random.randint(2,size=(1,200))))
vec_mat = vstack(vec_list)
vec_mat.shape
输出:
(100, 200)
我正在使用 python 3.8.2 和 scipy 1.4.1
关于python - VSTACK scipy.sparse.csr.csr_matrix 到一个 csr 矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61674309/