python - 堆叠两个不同维度的稀疏矩阵

标签 python scipy scikit-learn sparse-matrix

我有两个稀疏矩阵(由 sklearn HashVectorizer 创建,来自两组特征 - 每组对应一个特征)。我想将它们连接起来,以便以后将它们用于聚类。但是,我遇到了维度问题,因为这两个矩阵的行维度不同。

这是一个例子:

Xa = [-0.57735027 -0.57735027  0.57735027 -0.57735027 -0.57735027  0.57735027
  0.5         0.5        -0.5         0.5         0.5        -0.5         0.5
  0.5        -0.5         0.5        -0.5         0.5         0.5        -0.5
  0.5         0.5       ]

Xb = [-0.57735027 -0.57735027  0.57735027 -0.57735027  0.57735027  0.57735027
 -0.5         0.5         0.5         0.5        -0.5        -0.5         0.5
 -0.5        -0.5        -0.5         0.5         0.5       ]

两者都是 XaXb类型为 <class 'scipy.sparse.csr.csr_matrix'> .形状是 Xa.shape = (6, 1048576) Xb.shape = (5, 1048576) .我得到的错误是(我现在知道为什么会这样):

    X = hstack((Xa, Xb))
  File "/usr/local/lib/python2.7/site-packages/scipy/sparse/construct.py", line 464, in hstack
    return bmat([blocks], format=format, dtype=dtype)
  File "/usr/local/lib/python2.7/site-packages/scipy/sparse/construct.py", line 581, in bmat
    'row dimensions' % i)
ValueError: blocks[0,:] has incompatible row dimensions

有没有一种方法可以堆叠稀疏矩阵,尽管它们的维度不规则?也许有一些填充?

我查看了这些帖子:

最佳答案

您可以用空的稀疏矩阵填充它。

您想水平堆叠它,因此您需要填充较小的矩阵,使其与较大的矩阵具有相同的行数。为此,您垂直堆叠它与形状为的矩阵(原始矩阵的行数、列数的差异)

像这样:

from scipy.sparse import csr_matrix
from scipy.sparse import hstack
from scipy.sparse import vstack

# Create 2 empty sparse matrix for demo
Xa = csr_matrix((4, 4))
Xb = csr_matrix((3, 5))


diff_n_rows = Xa.shape[0] - Xb.shape[0]

Xb_new = vstack((Xb, csr_matrix((diff_n_rows, Xb.shape[1])))) 
#where diff_n_rows is the difference of the number of rows between Xa and Xb

X = hstack((Xa, Xb_new))
X

结果是:

<4x9 sparse matrix of type '<class 'numpy.float64'>'
    with 0 stored elements in COOrdinate format>

关于python - 堆叠两个不同维度的稀疏矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40745180/

相关文章:

python - Python的sklearn(DecisionTreeClassifier,SVM)之间的区别?

python - "bound method": How to create a file name in sub directory with python

python - Scrapy csv 文件有统一的空行?

python - 你如何调试无响应的 Django?

Python:傅立叶分析后设计时间序列滤波器

python - 损坏的 numpy/scipy 安装(python、ubuntu 10.04)

python - 在 wx.Panel 中点击事件?

python - future 警告 : Using a non-tuple sequence for multidimensional indexing is deprecated use `arr[tuple(seq)]`

python - scikit learn 是否包含具有连续输入的朴素贝叶斯分类器?

python - 在 python/sklearn 中没有交叉验证的随机搜索