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

时间:2017-05-05 21:38:27

标签: python numpy scipy sparse-matrix

我想在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 :(得分: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]),尽管它不是非常易读。

相关问题