我想在稀疏矩阵的一行和另一个列表之间执行元素逻辑运算。
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().
中出现错误的原因已经有一个很好的解释了
然而,a.any()
或a.all()
将只返回一个真值,而不执行元素方面的操作。此外,np.logical_or(a[2,:],b)
返回相同的错误。
您需要做两件事:
将列表强制转换为np.ndarray
,并使用+
而不是or
。由于一些原因,我不知道bitwise_or
运算符|
(用于数组(在这里不起作用。
a[2] += np.array(b)
矢量化or
是numpy
运算;公共列表没有直接的等价物。最有效和可读的方法是将布尔列表转换为np_array,然后应用该操作,让numpy
的处理来规则该过程。