稀疏矩阵行和列表之间的逐元素布尔运算

Element-wise boolean operation between row of sparse matrix and list

我想在稀疏矩阵的一行和另一个列表之间执行元素明智的逻辑运算。

from scipy.sparse import lil_matrix
a=lil_matrix((3,3), dtype=bool)
b=[True,False,True]
a[2,:]=a[2,:] or b

但是,这个 returns:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all().

对于错误发生的原因,已经有一个很好的解释here

然而,a.any()a.all() 将 return 只有一个真值并且不会执行某些元素明智的事情。此外,np.logical_or(a[2,:],b) returns 同样的错误。

矢量化 or 是一个 numpy 操作;通用列表没有直接等效项。执行此操作的最有效和可读的方法是将布尔列表转换为 np_array,然后 然后 应用该操作,让 numpy 的处理来统治过程。

你需要做两件事:

将列表转换为 np.ndarray 并使用 + 而不是 or。由于我不知道的原因,bitwise_or 运算符 |(用于数组的)在这里不起作用。

a[2] += np.array(b)