Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python scipy.sparse.hstack[值错误:块必须是二维]_Python_Numpy_Scipy_Sparse Matrix - Fatal编程技术网

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
(或变体)组合并从中生成稀疏矩阵会更快。