es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Numpy – ¿cómo contar valores en una columna basado en valores binarios en otras columnas?

Tengo una matriz numpy 2D de solo valores binarios, y estoy tratando de contar el número de 1 que tengo en una columna basada en las combinaciones binarias de otras columnas con la misma fila.

Así que digamos que tengo:

[[0,0,0,0],
[1,0,1,0],
[0,0,0,1],
[1,0,0,0],
[0,1,0,0],
[1,0,1,0]]

y quiero poder contar el número de 1 en la primera columna donde las otras columnas dentro de la misma fila tienen los valores [0, 1, 0]. Necesito que mi código devuelva 2. Ya que ese es el caso en las filas 1 y 5.

He intentado hacer esto con una máscara, pero no está devolviendo el resultado que estoy buscando:

test = numpy.asarray(
[[0,0,0,0],
[1,0,1,0],
[0,0,0,1],
[1,0,0,0],
[0,1,0,0],
[1,0,1,0]])
mask = test[:,[1, 2, 3]] == [0,1,0]
mask

que devuelve

array([[ True, False, True],
[ True, True, True],
[ True, False, False],
[ True, False, True],
[False, False, True],
[ True, True, True]])

suponiendo que la máscara es el enfoque correcto, ¿alguna sugerencia sobre qué hacer después de obtener esta máscara?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para contar el número de 1s en la primera columna donde las otras columnas dentro de la misma fila tienen los valores [0, 1, 0], puedes usar la función sum() de numpy para sumar el número de valores True en la máscara resultante para cada fila. Aquí está el código que debería funcionar:

    test = numpy.asarray(
        [[0,0,0,0],
         [1,0,1,0],
         [0,0,0,1],
         [1,0,0,0],
         [0,1,0,0],
         [1,0,1,0]])
    mask = (test[:,1] == 0) & (test[:,2] == 1) & (test[:,3] == 0)
    count = numpy.sum(mask * test[:,0])
    print(count) # debería imprimir 2
    

    Ten en cuenta que la máscara se crea utilizando los operadores booleanos & (AND) entre las comparaciones de cada columna con el valor deseado [0, 1, 0]. Además, la multiplicación de la máscara con la primera columna del arreglo original se utiliza para seleccionar solo los valores de esa columna donde la máscara es True, y luego la función numpy.sum() suma esos valores.

Comments are closed.