python - VSTACK scipy.sparse.csr.csr_matrix 到一个 csr 矩阵

标签 python matrix scipy csr

我最近很难处理稀疏矩阵并将它们堆叠到单个矩阵中。 我曾经创建多个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/

相关文章:

python - 如何解释 scipy.fftpack.fft 的输出?

python - 在 Python 中保存异构图像网格

python - 获取非浮点列的 DataFrame 列名列表

python - 我需要一个很好的理由来使用 Python

c - 向前移动和矩阵中的索引

python - 从矩阵中找到第一个匹配子矩阵的快速方法

python - SciPysolve_ivp 的解决方案包含一阶 ODE 系统的振荡

python - 困惑如何根据条件将一个数据帧中的值替换为另一个数据帧中的值

Python __repr__ 和 None

r - 将矩阵转换为数字数据框