最近,我很难处理稀疏矩阵,并将它们叠加到一个矩阵中。我过去常常创建多个csr_matrix对象
vec_list = sp.sparse.csr_matrix(my_vec_i) # every vector of shape (1,200)在vec_list由大约100个稀疏矩阵组成之后,我使用了sp.vstack函数(而不是numpy)将所有100个条目合并到一个形状的csr矩阵( 100,200)中。
现在,在我的当前设置(python3.8)中,我看到了一个警告,即sp.vstack将被废弃,但无论如何,不管我是否使用了numpy的或and的vstack功能,我最终得到了一个形状(100,1)的数组,其中我的200列被视为第一列和唯一一列中的1 csr_matrix条目。
在我看到的旧代码片段中,sp.vstack(vec_list)创建了一个形状为的稀疏crs矩阵(100,200)。我错过了什么吗,有人对此有想法吗?我有点绝望地想要建立我的堆积的稀疏矩阵。感谢所有人
编辑:正如你在下面的评论中所看到的,np.vstack和sp.vstack不一定要做同样的事情(在我的回答中,我难过np.vstack两次,但我指的是sp.vstack一次)。我使用的是精确的解决方案(复制),它在某个时候返回了一个错误,因为没有发生堆叠。为了使用sp.stacking,我对非csr_矩阵数组进行了叠加,然后将其转换为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
发布于 2020-05-12 14:11:11
不幸的是,我无法看到与上述相同的结果--使用我的Python3.8.3rc1。复制代码和堆叠会导致以下情况:
>>> np.vstack(vec_list).shape # (100, 1)
>>> sp.vstack(vec_list).shape # (100, 1)我要做些什么来解决我的问题:我将堆叠非csr_矩阵数组,然后将其转换为csr_matrix。不管怎样,谢谢你!
发布于 2020-05-08 08:32:59
不幸的是,我不能重复你的错误。这是我的代码:
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和and 1.4.1
https://stackoverflow.com/questions/61674309
复制相似问题