【问题标题】:Element-wise boolean operation between row of sparse matrix and list稀疏矩阵行和列表之间的逐元素布尔运算
【发布时间】:2020-03-09 19:03:19
【问题描述】:

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

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) 返回相同的错误。

【问题讨论】:

    标签: python list numpy boolean or-operator


    【解决方案1】:

    你需要做两件事:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2021-09-26
        • 2017-06-05
        • 2018-07-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-16
        • 1970-01-01
        相关资源
        最近更新 更多