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

 Смежные вопросы

  • Нет связанных вопросов^_^