我想在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'
答案 0 :(得分:0)
可以在稀疏布尔矩阵之间使用元素乘法a.multiply(b)
(“和”)和加法a+b
(“或”)来实现二进制运算。关于否定~
,可能值得将切片转换为密集,因为稀疏矩阵的否定无论如何都会给出(可能非常)密集的矩阵。在某些情况下,谨慎使用De Morgan的法律可能会产生重大影响,并且如果可能的话,有助于避免(或减少)对此类转换的需求。
data[:,5] & ~data[:,23]
的一个可能技巧可能是data[:,5] > data[:,23]
。
data[:,5] & ~data[:,23] & data[:,400]
可以写成(data[:,5] > data[:,23]).multiply(data[:,400])
,尽管它不是非常易读。