我想在稀疏矩阵的一行和另一个列表之间执行元素明智的逻辑运算。
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)
返回相同的错误。
答案 0 :(得分:1)
您需要做两件事:
将该列表投射到np.ndarray
,并使用+
代替or
。由于某些原因,我不知道bitwise_or
运算符|
(该运算符将用于数组)在这里不起作用。
a[2] += np.array(b)
答案 1 :(得分:0)
向量化or
是numpy
操作;普通列表没有直接的等效项。执行此操作的最有效,最易读的方法是将布尔列表转换为np_array,然后然后应用该操作,让numpy
的处理才能确定该过程。