Tengo una lista de máscaras y quiero obtener la máscara resultante multiplicándolas todas. Mi enfoque de Donkey Kong es el siguiente:
a = [[1, 1], [1, 0], [1, 0]] b = a[0] for i in range(1, len(a)): b = b * np.array(a[i]) que creo que funciona como devuelve [1,0] como valor de b .
¿Hay una manera más agradable de hacer esto?
EDITAR: estoy buscando rangos comunes en la máscara. Para encontrar todos los rangos distintos de cero, hago lo siguiente: etiqueta = 0
for i in range(1, len(labels)): label = label + np.array(labels[i]) label = [1 if x > 0 else 0 for x in label]Veo que ya está usando numpy, por lo que puede usarse como sugirieron otras respuestas. Pero aún así, una buena solución integrada que solo usa reduce puede ser:
from functools import reduce a = [[1, 1], [1, 0], [1, 0]] def element_wise_multiply(list1, list2): return [x*y for x,y in zip(list1, list2)] b = reduce(element_wise_multiply, a) # Or as a lambda: b = reduce(lambda list1, list2: [x*y for x,y in zip(list1, list2)], a) Esto toma cada dos sublistas y las reduce a una multiplicando todos los elementos de coincidencia de índice usando zip . También da:
[1, 0]Una forma integrada con all esos cortocircuitos (no hay otra respuesta a los cortocircuitos ahora):
>>> [all(column) for column in zip(*a)] [True, False] donde zip(*a) de transposición para producir "columnas" como sublistas aquí y verificamos si todas las entradas son verdaderas. all tienen un comportamiento de circuito corto.
Puede int(all(sub)) para convertir los resultados en un número entero después de all 'en las sublistas.