如何在 SciPy 中创建 (0,N) 形压缩稀疏矩阵?

How to create (0,N)-shape compressed sparse matrix in SciPy?

我依赖于一个开源库 Detectron,它在 SciPy 中初始化压缩稀疏行 (CSR) 矩阵,形状为 (0,N),like so (link 到 GitHu 仓库中的相关行):

 entry['gt_overlaps'] = scipy.sparse.csr_matrix(
               np.empty((0, self.num_classes), 
               dtype=np.float32))

但是我可用的 SciPy 版本 (0.12.1) 不支持这种 (0,N) 形状,并给出一个 ValueError:

File "/mnt/nfs/work1/elm/arunirc/Tools/detectron/lib/datasets/json_dataset.py", line 150, in _prep_roidb_entry np.empty((0, self.num_classes), dtype=np.float32) File "/usr/lib64/python2.7/site-packages/scipy/sparse/compressed.py", line 66, in init self._set_self( self.class(coo_matrix(arg1, dtype=dtype)) ) File "/usr/lib64/python2.7/site-packages/scipy/sparse/coo.py", line 184, in init self.shape = M.shape File "/usr/lib64/python2.7/site-packages/scipy/sparse/base.py", line 74, in set_shape raise ValueError('invalid shape') ValueError: invalid shape

是否有确实支持创建此类 CSR 数组的 SciPy 版本?谢谢!

最近还可以:

In [286]: scipy.sparse.csr_matrix(
     ...:                np.empty((0, 3), 
     ...:                dtype=np.float32))
     ...:                
Out[286]: 
<0x3 sparse matrix of type '<class 'numpy.float32'>'
    with 0 stored elements in Compressed Sparse Row format>
In [287]: scipy.__version__
Out[287]: '1.0.0'

这不是一个非常有用的形状,但我想不出它无效的概念原因。