2016-01-21 40 views
1

我正在試圖使機器學習lib與scipy稀疏矩陣一起工作。從稀疏矩陣獲取所有唯一值[python/scipy]

下面的代碼是檢測y中是否有1個以上的類。因爲分類時只有1個類是沒有意義的。

import numpy as np 
y = np.array([0,1,0,1,0,1]) 
uniques = set(y) # get {0, 1} 

if len(uniques) == 1: 
    raise RuntimeError("Only one class detected, aborting...") 

set(y)如果y是SciPy的稀疏矩陣無法正常工作。

如何有效地獲得所有唯一值如果y是scipy稀疏矩陣?

PS:我知道set(y.todense())可以工作,但花費太多的內存

UPDATE:

>>> y = sp.csr_matrix(np.array([0,1,0,1,0,1])) 
>>> set(y.data) 
{1} 
>>> y.data 
array([1, 1, 1]) 

回答

3

稀疏矩陣的值存儲在不同的方式,但通常有一個.data的屬性,包含非零值。

set(y.data) 

可能是你需要的一切。這應該適用於coo,csr,csc。對於其他許多人需要轉換矩陣格式(例如y.tocoo)。

如果這不起作用,請給我們更多關於矩陣格式和問題的細節。

+0

scipy(0.16.1),'set(y.data)'不適用於win7 x64和centos 6.5 x64 – Mithril

+0

我已更新我的測試問題。 – Mithril

+1

你將不得不自己添加'0'。正如你所看到的,'y.data'數組只有非零值。這就是稀疏矩陣的本質。如果你不想使用我們能做的最好的密集版本。 – hpaulj