2016-08-01 150 views
4

我有以下10由5 numpy的陣列/矩陣,其具有多個NaN值:如何計算numpy數組/矩陣的稀疏度百分比?

array([[ 0., 0., 0., 0., 1.], 
     [ 1., 1., 0., nan, nan], 
     [ 0., nan, 1., nan, nan], 
     [ 1., 1., 1., 1., 0.], 
     [ 0., 0., 0., 1., 0.], 
     [ 0., 0., 0., 0., nan], 
     [ nan, nan, 1., 1., 1.], 
     [ 0., 1., 0., 1., 0.], 
     [ 1., 0., 1., 0., 0.], 
     [ 0., 1., 0., 0., 0.]]) 

一個人如何測量該陣列是究竟如何稀疏? numpy中是否有簡單的函數來測量缺失值的百分比?

+1

這個怎麼樣的http://文檔。 scipy.org/doc/scipy/reference/sparse.html? – Christos

+2

'sparse.html'記錄了一個創建稀疏矩陣的包,但是我沒有看到「稀疏」度量函數。稀疏性意味着許多「0」值,而不是「nan」值。 – hpaulj

回答

2
np.isnan(a).sum() 

給出nan值的數量,在本實施例8

np.prod(a.shape) 

是值的數量,這裏50.他們比應得到所需的值。

In [1081]: np.isnan(a).sum()/np.prod(a.shape) 
Out[1081]: 0.16 

您也可能會發現它很有用,從這個

In [1085]: a_ma=np.ma.masked_invalid(a) 
In [1086]: print(a_ma) 
[[0.0 0.0 0.0 0.0 1.0] 
[1.0 1.0 0.0 -- --] 
[0.0 -- 1.0 -- --] 
[1.0 1.0 1.0 1.0 0.0] 
[0.0 0.0 0.0 1.0 0.0] 
[0.0 0.0 0.0 0.0 --] 
[-- -- 1.0 1.0 1.0] 
[0.0 1.0 0.0 1.0 0.0] 
[1.0 0.0 1.0 0.0 0.0] 
[0.0 1.0 0.0 0.0 0.0]] 

然後有效值的數量做一個屏蔽數組:

In [1089]: a_ma.compressed().shape 
Out[1089]: (42,)