【发布时间】:2020-08-23 17:23:04
【问题描述】:
我最近努力处理稀疏矩阵并将它们堆叠到单个矩阵中。 我曾经创建多个 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 条目。
在我的旧代码 sn-ps 中,我可以看到,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
【问题讨论】:
-
如果您明确展示您如何定义
sp,这将有助于我们理解您的问题。我假设你已经完成了import scipy as sp。如果是这样,那么sp.vstack与numpy.vstack的功能完全相同。这种重复造成的混乱是不推荐在scipy命名空间中包含 numpy 名称的原因之一。对于稀疏矩阵,您需要scipy.sparse.vstack,如@Tinu 的回答。 -
感谢您的澄清。我在下面发布了最终答案