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?
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ónsum()
de numpy para sumar el número de valoresTrue
en la máscara resultante para cada fila. Aquí está el código que debería funcionar: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 esTrue
, y luego la funciónnumpy.sum()
suma esos valores.