Python scipy.sparse.hstack[值错误:块必须是二维]
Python scipy.sparse.hstack[值错误:块必须是二维],python,numpy,scipy,sparse-matrix,Python,Numpy,Scipy,Sparse Matrix,a和b是第二个numpy数组,我想垂直堆叠并压缩到稀疏数组 我只是使用: c=sp.hstack([a,b]) 但它抛出了一个错误: hstack中的/anaconda3/lib/python3.6/site-packages/scipy/sparse/construct.py(块、格式、数据类型) 462 463 """ -->464返回bmat([blocks],format=format,dtype=dtype) 465 466 bmat中的~/anaconda3/lib/pyt
a
和b
是第二个numpy数组,我想垂直堆叠并压缩到稀疏数组
我只是使用:
c=sp.hstack([a,b])
但它抛出了一个错误:
hstack中的/anaconda3/lib/python3.6/site-packages/scipy/sparse/construct.py(块、格式、数据类型)
462
463 """
-->464返回bmat([blocks],format=format,dtype=dtype)
465
466
bmat中的~/anaconda3/lib/python3.6/site-packages/scipy/sparse/construct.py(块、格式、数据类型)
545
546如果blocks.ndim!=2:
-->547提升值错误('块必须是2-D')
548
549 M,N=块体形状
ValueError:块必须是二维的
但我记得这段代码在我以前的代码中是有效的。问题在于堆栈列表至少包含一个稀疏数组 换句话说,代码
c=sp.hstack([a,b,c,d,…]))
在[a,b,c,d,…]
中,必须至少包含一个稀疏数组
如果列表不包含稀疏数组,可以尝试:
c=sp.hstack([sp.csr_矩阵(a),b,c,d,…)
实际上,测试是在
np.array([[a,b]],object)的ndim
上进行的
。如果a
和b
按照文档中的规定是稀疏的,这可以正常工作。但是带有匹配形状的ndarray
可以生成更高维度的数组。文档中说:具有兼容形状的稀疏矩阵序列
。ndarray
不可靠。我怀疑你的a
和b
具有相同的形状。此错误消息中的blocks
指由np.array([[a,b]],object)
生成的数组。hstack通过sparse.bmat
从每个输入创建一个coo_矩阵
(如果它们已经是稀疏的,这是一个简单的任务),并将它们的属性组合成一个新的coo_矩阵
。如果您从numpy数组开始,那么首先将它们与np.hstack
(或变体)组合并从中生成稀疏矩阵会更快。