scipy.sparse.hstack((1, [2]))scipy.sparse.hstack((1, [2]))效果很好,但scipy.sparse.hstack(([1], [2]))不好。为什么会这样呢?

这是我的系统上发生的痕迹:

C:\Anaconda>python
Python 2.7.10 |Anaconda 2.3.0 (64-bit)| (default, May 28 2015, 16:44:52) [MSC v.
1500 64 bit (AMD64)] on win32
>>> import scipy.sparse
>>> scipy.sparse.hstack((1, [2]))
<1x2 sparse matrix of type '<type 'numpy.int32'>'
        with 2 stored elements in COOrdinate format>
>>> scipy.sparse.hstack((1, 2))
<1x2 sparse matrix of type '<type 'numpy.int32'>'
        with 2 stored elements in COOrdinate format>
>>> scipy.sparse.hstack(([1], [2]))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Anaconda\lib\site-packages\scipy\sparse\construct.py", line 456, in h
stack
    return bmat([blocks], format=format, dtype=dtype)
  File "C:\Anaconda\lib\site-packages\scipy\sparse\construct.py", line 539, in b
mat
    raise ValueError('blocks must be 2-D')
ValueError: blocks must be 2-D
>>> scipy.version.full_version
'0.16.0'
>>>

最佳答案

编码细节为:

def hstack(blocks ...):
    return bmat([blocks], ...)

def bmat(blocks, ...):
    blocks = np.asarray(blocks, dtype='object')
    if blocks.ndim != 2:
        raise ValueError('blocks must be 2-D')
    (continue)

因此,请尝试其他方法(记住额外的[]):
In [392]: np.asarray([(1,2)],dtype=object)
Out[392]: array([[1, 2]], dtype=object)

In [393]: np.asarray([(1,[2])],dtype=object)
Out[393]: array([[1, [2]]], dtype=object)

In [394]: np.asarray([([1],[2])],dtype=object)
Out[394]:
array([[[1],
        [2]]], dtype=object)

In [395]: _.shape
Out[395]: (1, 2, 1)

最后一个案例(您的问题案例)失败了,因为结果是3d。

使用2个稀疏矩阵(预期输入):
In [402]: np.asarray([[a,a]], dtype=object)
Out[402]:
array([[ <1x1 sparse matrix of type '<class 'numpy.int32'>'
    with 1 stored elements in COOrdinate format>,
        <1x1 sparse matrix of type '<class 'numpy.int32'>'
    with 1 stored elements in COOrdinate format>]], dtype=object)

In [403]: _.shape
Out[403]: (1, 2)
hstack通过将矩阵列表转换为嵌套的(2d)矩阵列表来利用bmat格式。 bmat旨在将一种2d稀疏矩阵数组组合为一个较大的数组。跳过首先制作这些稀疏矩阵的步骤可能会,也可能不会。代码和文档没有任何 promise 。

关于python - scipy.sparse.hstack(([[1],[2]))-> "ValueError: blocks must be 2-D"。为什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31900567/

10-09 13:57