Saltar al contenido

¿Cómo calcular el porcentaje de escasez para una matriz / matriz numpy?

Solución:

Definición:

ingrese la descripción de la imagen aquí

Código para un caso general:

from numpy import array
from numpy import count_nonzero
import numpy as np

# create dense matrix
A = array([[1, 1, 0, 1, 0, 0], [1, 0, 2, 0, 0, 1], [99, 0, 0, 2, 0, 0]])

#If you have Nan
A = np.nan_to_num(A,0)

print(A)
#[[ 1  1  0  1  0  0]
# [ 1  0  2  0  0  1]
# [99  0  0  2  0  0]]

# calculate sparsity
sparsity = 1.0 - ( count_nonzero(A) / float(A.size) )
print(sparsity)

Resultados:

0.555555555556

La medición del porcentaje de valores perdidos ya se ha explicado por ‘hpaulj’.

Estoy tomando la primera parte de su pregunta, asumiendo que la matriz tiene cero y no cero …

La dispersión se refiere a valores cero y la densidad se refiere a valores distintos de cero en la matriz. Suponga que su matriz es X, obtenga el recuento de valores distintos de cero:

non_zero = np.count_nonzero(X)

valores totales en X:

total_val = np.product(X.shape)

La escasez será –

sparsity = (total_val - non_zero) / total_val

Y la densidad será …

density = non_zero / total_val

La suma de la dispersión y la densidad debe ser igual al 100% …

np.isnan(a).sum()

da el número de nan valores, en este ejemplo 8.

np.prod(a.shape)

es el número de valores, aquí 50. Su relación debe dar el valor deseado.

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

También puede resultarle útil hacer una matriz enmascarada a partir de este

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]]

El número de valores válidos entonces es:

In [1089]: a_ma.compressed().shape
Out[1089]: (42,)
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *