VSTACK scipy.sparse.csr.csr_matrix 到一个单一的 csr 矩阵
VSTACK scipy.sparse.csr.csr_matrix to one single csr matrix
我最近努力处理稀疏矩阵并将它们堆叠到单个矩阵中。
我曾经创建多个 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).
现在在我当前的设置中 (python 3.8) 我看到一条警告,指出 sp.vstack 将被弃用,但无论如何,如果我使用了 numpy 或 scipy 的 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_matrix 数组,然后将其转换为 csr_matrix。这在使用大量数组时是不切实际的,但至少我可以 运行 毫无问题地浏览文件。
为了解决 Tinu 的以下答案,我无法以这种方式解决它,因为结果如下所示 - 执行示例代码时:
>>> np.vstack(vec_list).shape
(100, 1)
>>> sp.vstack(vec_list).shape
(100, 200)
Python3.8.2,Scipy1.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 3.8.3rc1。复制代码并堆叠导致如下:
>>> np.vstack(vec_list).shape # (100, 1)
>>> sp.vstack(vec_list).shape # (100, 1)
我将如何解决我的问题:我将堆叠 non-csr_matrix 个数组,然后将其转换为 csr_matrix。无论如何谢谢!
我最近努力处理稀疏矩阵并将它们堆叠到单个矩阵中。 我曾经创建多个 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).
现在在我当前的设置中 (python 3.8) 我看到一条警告,指出 sp.vstack 将被弃用,但无论如何,如果我使用了 numpy 或 scipy 的 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_matrix 数组,然后将其转换为 csr_matrix。这在使用大量数组时是不切实际的,但至少我可以 运行 毫无问题地浏览文件。 为了解决 Tinu 的以下答案,我无法以这种方式解决它,因为结果如下所示 - 执行示例代码时:
>>> np.vstack(vec_list).shape
(100, 1)
>>> sp.vstack(vec_list).shape
(100, 200)
Python3.8.2,Scipy1.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 3.8.3rc1。复制代码并堆叠导致如下:
>>> np.vstack(vec_list).shape # (100, 1)
>>> sp.vstack(vec_list).shape # (100, 1)
我将如何解决我的问题:我将堆叠 non-csr_matrix 个数组,然后将其转换为 csr_matrix。无论如何谢谢!