2013-12-11 402 views
4

我使用一個處理大型網絡的程序,因此我必須使用稀疏矩陣(最好是scipy.sparse.csr)。現在我想編寫一個函數,該函數使用兩個稀疏布爾矩陣A和B,並返回B,但不包含那些在A中設置的條目。這是一個僞代碼示例。在python中比較兩個scipy.sparse矩陣

def f(A, B): 
    return B and (not A) 

這怎麼能用scipy.sparse矩陣完成?

+0

這僞代碼不會與numpy的布爾矩陣的工作,它會抱怨你正在使用的矩陣布爾運算。以下將使用正常的矩陣:'返回B&〜A'。 –

+0

即使其中任何一個都有效,你也不會真的想做'不是'或'〜A',因爲結果不會很稀疏。 –

回答

2

這裏實現你的函數的一種方式:

def f(a, b): 
    return b - b.multiply(a) 

b.multiply(a)實際上是元素之and操作。

下面是一個例子。 ab是稀疏矩陣:

In [134]: b.A 
Out[134]: array([[False, False, True, True]], dtype=bool) 

In [135]: a.A 
Out[135]: array([[False, True, False, True]], dtype=bool) 

In [136]: f(a,b).A 
Out[136]: array([[False, False, True, False]], dtype=bool) 
+0

這就是我正在尋找的。非常感謝您的快速幫助 – user3091669