Quiero verificar si todos los valores en las columnas de una matriz / matriz numpy son iguales. He intentado utilizar reduce
de la ufunc equal
, pero no parece que el trabajo en todos los casos:
In [55]: a = np.array([[1,1,0],[1,-1,0],[1,0,0],[1,1,0]])
In [56]: a
Out[56]:
array([[ 1, 1, 0],
[ 1, -1, 0],
[ 1, 0, 0],
[ 1, 1, 0]])
In [57]: np.equal.reduce(a)
Out[57]: array([ True, False, True], dtype=bool)
In [58]: a = np.array([[1,1,0],[1,0,0],[1,0,0],[1,1,0]])
In [59]: a
Out[59]:
array([[1, 1, 0],
[1, 0, 0],
[1, 0, 0],
[1, 1, 0]])
In [60]: np.equal.reduce(a)
Out[60]: array([ True, True, True], dtype=bool)
¿Por qué la columna del medio en el segundo caso también se evalúa como True
, cuando debería ser False
?
¡Gracias por cualquier ayuda!
In [45]: a
Out[45]:
array([[1, 1, 0],
[1, 0, 0],
[1, 0, 0],
[1, 1, 0]])
Compare cada valor con el valor correspondiente en la primera fila:
In [46]: a == a[0,:]
Out[46]:
array([[ True, True, True],
[ True, False, True],
[ True, False, True],
[ True, True, True]], dtype=bool)
Una columna comparte un valor común si todos los valores de esa columna son verdaderos:
In [47]: np.all(a == a[0,:], axis = 0)
Out[47]: array([ True, False, True], dtype=bool)
El problema con np.equal.reduce
se puede ver microanalizando lo que sucede cuando se aplica a [1, 0, 0, 1]
:
In [49]: np.equal.reduce([1, 0, 0, 1])
Out[50]: True
Los dos primeros elementos 1
y 0
se prueban para determinar la igualdad y el resultado es False
:
In [51]: np.equal.reduce([False, 0, 1])
Out[51]: True
Ahora False
y 0
se prueban para la igualdad y el resultado es True
:
In [52]: np.equal.reduce([True, 1])
Out[52]: True
Pero True
y 1 son iguales, por lo que el resultado total es True
, que no es el resultado deseado.
El problema es que reduce
intenta acumular el resultado "localmente", mientras que queremos una prueba "global" como np.all
.
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras