Python 具有稀疏hstack的Scipy错误

Python 具有稀疏hstack的Scipy错误,python,scipy,Python,Scipy,在尝试将密集和稀疏数据与scipy.spare.hstack组合时,我偶尔会遇到以下错误: Traceback (most recent call last): File "hstack_error.py", line 3, in <module> X = scipy.sparse.hstack(hstack_parts) File "/usr/lib/python2.7/dist-packages/scipy/sparse/construct.py", line 2

在尝试将密集和稀疏数据与scipy.spare.hstack组合时,我偶尔会遇到以下错误:

Traceback (most recent call last):
  File "hstack_error.py", line 3, in <module>
    X = scipy.sparse.hstack(hstack_parts)
  File "/usr/lib/python2.7/dist-packages/scipy/sparse/construct.py", line 263, in hstack
    return bmat([blocks], format=format, dtype=dtype)
  File "/usr/lib/python2.7/dist-packages/scipy/sparse/construct.py", line 329, in bmat
    raise ValueError('blocks must have rank 2')
ValueError: blocks must have rank 2

此错误是什么意思?如何修复数据以使其不再发生?

您尝试连接的部分不是稀疏矩阵对象,而是普通密集矩阵对象。您可以使用以下内容构造稀疏矩阵:

x_sparse = scipy.sparse.coo_matrix(hstack_parts[0])
y_sparse = scipy.sparse.coo_matrix(hstack_parts[1])
z_sparse = scipy.sparse.hstack([x_sparse, y_sparse])
要回收密集表示,可以使用:

z = z_sparse.todense()
以下是有关稀疏.coo_矩阵的文档,可帮助您确定它是否适合您的问题:


似乎
scipy.sparse.hstack
无法处理密集矩阵
numpy.hstack(hstack\u部件)
应该可以-->我已经试过了。不幸的是,
numpy.hstack
还有其他缺点,不适合与scikit学习分类器和回归器一起使用。据推测,这就是它重新实施的原因。应该注意的是,
scipy.sparse.hstack
确实处理了我给它的大多数密集矩阵……谢谢。迭代我所有的部分,用
issparse()
检查每个部分,用密集部分调用
coo\u matrix()
就可以了。非常感谢您,先生。我已经在网上查了好几天,想找到一个解决办法,但是没有用,然后我找到了你的答案。谢谢,这也解决了我的问题。
z = z_sparse.todense()