2016-08-01 148 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,)