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

时间:2019-11-13 22:03:05

标签: python list numpy boolean or-operator

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

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

但是,这返回:

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()将仅返回一个真值,而不执行某些元素明智的操作。另外,np.logical_or(a[2,:],b)返回相同的错误。

2 个答案:

答案 0 :(得分:1)

您需要做两件事:

将该列表投射到np.ndarray,并使用+代替or。由于某些原因,我不知道bitwise_or运算符|(该运算符将用于数组)在这里不起作用。

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

答案 1 :(得分:0)

向量化ornumpy操作;普通列表没有直接的等效项。执行此操作的最有效,最易读的方法是将布尔列表转换为np_array,然后然后应用该操作,让numpy的处理才能确定该过程。