稀疏矩阵行和列表之间的逐元素布尔运算
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)
我想在稀疏矩阵的一行和另一个列表之间执行元素明智的逻辑运算。
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)