基于另一篇关于值错误块的帖子提问必须是2D

2024-04-20 06:45:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我是新到这个网站,没有足够的声誉作出评论后,下面的帖子,所以我希望通过介绍这里,我可以得到一些帮助。你知道吗

我当前的输入形状如下:

[array([[0.1,0.2], [0.3, 0.4], [0.5, 0.6]])]

如果可能的话:

[[[0.1,0.2], [0.3, 0.4], [0.5, 0.6]]]

我收到了同样的错误和同样的问题:

ValueError: blocks must be 2-D

基于本文中的解决方案,我想问的是,有没有一种方法不将密集数组转换为coo_矩阵。由于转换它将需要很多过程,所以有没有一种方法只是以某种方式将其更改为二维,然后使用hstack?你知道吗

以下是帖子:

scipy.sparse.hstack(([1], [2])) -> "ValueError: blocks must be 2-D". Why?


Tags: 方法网站错误评论be解决方案array帖子
1条回答
网友
1楼 · 发布于 2024-04-20 06:45:18

显示包含数组的列表:

In [370]: alist = [np.array([[0.1,0.2], [0.3, 0.4], [0.5, 0.6]])]
In [371]: alist
Out[371]: 
[array([[0.1, 0.2],
        [0.3, 0.4],
        [0.5, 0.6]])]

只需将其包装在np.array中即可生成一个3d数组:

In [372]: np.array(alist)
Out[372]: 
array([[[0.1, 0.2],
        [0.3, 0.4],
        [0.5, 0.6]]])

numpyhstack生成二维数组:

In [373]: np.hstack(alist)
Out[373]: 
array([[0.1, 0.2],
       [0.3, 0.4],
       [0.5, 0.6]])

也就是说,它接受1元素列表并将其与其他元素连接,返回元素本身。你知道吗

我不明白你为什么偏袒于稀疏hstack。你知道吗


在稀疏hstack中使用alist的正确方法:

In [386]: sparse.hstack([sparse.coo_matrix(alist[0])])
Out[386]: 
<3x2 sparse matrix of type '<class 'numpy.float64'>'
    with 6 stored elements in COOrdinate format>
In [387]: _.A
Out[387]: 
array([[0.1, 0.2],
       [0.3, 0.4],
       [0.5, 0.6]])

sparse.coo_matrix(alist)不起作用,因为如上所述,从中生成数组会生成3d数组。所以我们必须把它从列表中去掉,alist[0]。然后生成一个稀疏矩阵,然后将其传递给bmat进行进一步处理。你知道吗

我想我在另一个问题中描述过,sparse.hstack通过连接输入数组的coo属性来工作,在这个过程中生成一个新的coo矩阵。因此,即使我们可以将某种类型的列表或密集数组传递给hstack,它仍然必须从每个元素中生成一个coo矩阵。你知道吗

如果您想要一个更快速的密集concatenate版本,就不要使用sparse.hstack。如果您已经有一些大型稀疏矩阵,并且希望将它们连接起来,或者可能添加密集的列或行,请使用它。更重要的是,它是一个方便的工具,用于从较小的片段构建大型稀疏矩阵。你知道吗

相关问题 更多 >