Al pasar un numpy.ndarray de uint8 a numpy.logical_and , se ejecuta significativamente más rápido si aplico numpy.view(bool) a sus entradas.
a = np.random.randint(0, 255, 1000 * 1000 * 100, dtype=np.uint8) b = np.random.randint(0, 255, 1000 * 1000 * 100, dtype=np.uint8) %timeit np.logical_and(a, b) 126 ms ± 1.17 ms per loop (mean ± std. dev. of 7 runs, 10 loops each) %timeit np.logical_and(a.view(bool), b.view(bool)) 20.9 ms ± 110 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)¿Alguien puede explicar por qué sucede esto?
Además, ¿por qué numpy.logical_and no aplica automáticamente view(bool) a una matriz de uint8 ? (¿Hay alguna situación en la que no debamos usar view(bool) ?)
EDITAR:
Parece que este es un problema con el entorno de Windows. Acabo de intentar lo mismo en el contenedor docker oficial de python (que es debian) y no encontré ninguna diferencia entre ellos.
Mi entorno: