我正在尝试使用奇特的索引来修改一个大的稀疏矩阵。假设您有以下代码:
import numpy as np
import scipy.sparse as sp
a = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])
b = sp.lil_matrix(a)
c = sp.lil_matrix((3,4))
c[[1,2], 0] = b[[1,2], 0]
但是,此代码会出现以下错误:
ValueError: shape mismatch in assignment
我不明白为什么这样不行。这两个矩阵具有相同的形状,如果两个矩阵都是numpy数组,则这通常有效。我将感谢任何帮助
是的,这是一个稀疏
__setitem__
的bug。我以前也遇到过(但我只是解决了这个问题)。现在我真的调查过了;首先,您可以非常轻松地解决此问题:这将引发您看到的
ValueError
。这不符合预期,并且按照预期工作:让我们只看一下the offending ^{} (我将省略许多没有被调用的代码):
这很好
row = [1, 2]
和col = 0
到目前为止还不错{}和{}
这是我们的问题-
i
和j
都变成了具有(1, 2)
形状的行向量x
这是您试图分配的(b[[1,2], 0]
),其形状为(2, 1)
;下一步将引发ValueError
原因x
,并且索引不对齐这里有同样的问题,但是
__setitem__
将x
广播到(2,2)
数组中,然后该数组再次失败,因为它比您分配给它的数组大解决方法(
b[[1,2], [0]]
)的形状为(1, 2)
,这是不正确的,但该错误最终会消除索引c
中的错误我不确定这个索引代码背后的逻辑到底是什么,所以我不确定如何在不引入其他微妙bug的情况下修复它
相关问题 更多 >
编程相关推荐