2012-11-17 127 views
6

似乎沒有scipy.sparse中的方法,它給出了最小的稀疏矩陣。特別是,我尋求最低的專欄。最小的一個稀疏矩陣?

沒有方法出現在文檔中,而numpy最小值不適用。如果X是一個稀疏矩陣,則X.min()也會引發錯誤:*** AttributeError: 'module' object has no attribute 'min'

這肯定是人們使用的東西。這是如何完成的?

+1

大概你的意思是「最小非零元素」。畢竟,稀疏矩陣隱含地包含大部分零。 – talonmies

+0

不 - 我的意思是「最低」。稀疏矩陣可以有負項目。萊斯曼的回答給出了這一點。 – gabe

+0

稀疏矩陣中的否定條目也是非零值。 – talonmies

回答

7

與CSR/CSC矩陣,使用

def min_sparse(X): 
    if len(X.data) == 0: 
     return 0 
    m = X.data.min() 
    return m if X.getnnz() == X.size else min(m, 0) 

要做到這一點每行或列,您可以map這種過度X.getrow(i) for i in X.shape[0]X.shape[1]

但你說得對,這應該是一種方法。

+0

謝謝 - 你真棒!我將提交給scipy-list。 – gabe

+0

另外 - 很高興知道稀疏矩陣的屬性.data。 (我相信)這在教程中沒有提及。 – gabe

+1

另外 - 你能解釋爲什麼你返回'm'如果'X.getnnz()== X.size'?我只是看着實際的代碼,這應該永遠是真的。 我發現'm'就是你想要返回的 - 但我不明白你的返回邏輯。 – gabe