首页 文章

Scipy稀疏矩阵:列的布尔组合

提问于
浏览
2

我想在Scipy(v0.18.1)中使用布尔运算组合稀疏(二进制)数组的列 . 对于密集矩阵,它可以正常工作:

data[:,5] & ~data[:,23] & data[:,400]

它折叠成一列 . 但是,在使用稀疏数组执行此操作时出现错误 .

布尔部分的错误:

"unsupported operand type(s) for &: 'csc_matrix' and 'csc_matrix'"

〜(反转)部分出错:

bad operand type for unary ~: 'csc_matrix'

1 回答

  • 0

    可以在稀疏布尔矩阵之间使用元素乘法 a.multiply(b) ("and")和加法 a+b ("or")来实现二进制运算 . 关于否定 ~ ,可能值得将切片转换为密集,因为否定稀疏矩阵无论如何都会给出(可能非常)密集的矩阵 . 在某些情况下,谨慎使用De Morgan的法律可能会产生重大影响,并且如果可能的话,有助于避免(或减少)对此类转换的需求 .

    data[:,5] & ~data[:,23] 的一个可能技巧可能是 data[:,5] > data[:,23] .

    data[:,5] & ~data[:,23] & data[:,400] 可以写成 (data[:,5] > data[:,23]).multiply(data[:,400]) 虽然它不是很易读 .

相关问题